main의 a와 alloc의 x는 서로 별개의 포인터입니다. alloc(a, 100);이라는 건 "a가 가리키는 주소를 x가 가리키게 하는" 역할을 할 뿐입니다. x = (int *)malloc(sizeof(int)*n); 은 x가 어떤 할당된 메모리 공간을 가리키게 하는 것이지, a가 가리키는 주소가 변하진 않습니다.
무슨 말씀인지 알겠습니다. alloc함수가 불필요하네요 감사합니다~~
포인터 극혐이지요..
인자를 값으로 넘겨 받아서 그런 건데요. 아마도.. 포인터를 처음 접하신 분은..
어? void alloc(int *x, int n)
{
}
이건 참조에 의한 호출이 아니냐고 생각하실지도.. 모르겠지만.
이건 어디까지나 main 안에 있는 int형을 가리키는 포인터 변수인 a의 값을 alloc에다가 복사한 것 뿐이죠..
그렇기 때문에 alloc 함수 내에서 복사된 x의 값만 바뀌지.. alloc 함수가 끝나고 나서
main 함수에 있는 a의 값이 바뀌지 않습니다.
쉽게 이야기 해 드리면
main 함수 내에 a라는 변수가 있었고
main 안에 func(a)를 호출했습니다.
func(int a)
{
}
이 부분에서 아무리 a의 값을 바꿔버린다고 해도.. main 안에 있는 a의 값은 변하지 않죠..
애초에 별개의 공간에 들어있기 때문이지요.
call by value 개념을 보시는 거 추천드려요.. 처음 접하시면 상당히 헷갈려 하시는 부분이더라고요.
댓글을 작성하려면 로그인해야 합니다.
vhxpffltm12 6년 전 1
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
#include<math.h>
#include<queue>
#include<stack>
#include<functional>
using namespace std;
void alloc(int *x, int n) {
x = (int *)malloc(sizeof(int)*n);
}
int main()
{
int *a;
alloc(a, 100);
a[50] = 1;
printf("%d ", a[50]);
return 0;
}
해당 코드가 실행시 오류가 발생하는데 왜 그런지 아무리 봐도 모르겠습니다. ㅠ
도와주세요 ㅜ