void createQueue(Header *header)
{
if (header == NULL)
{
header = (Header*)malloc(sizeof(Header));
header->currentCount = 0;
header->frontNode = NULL;
header->rearNode = NULL;
}
}
인자로 NULL값을 가지는 Header형 구조체 포인터를 넘겨서 값을 받아오는거잖아.
레퍼런스를 넘겨서 값을 받아오는건데 저거 정상적으로 동작해야 되는거 아냐? 왜 저 함수가 종료되고 메인으로 돌아오면 header가 여전히 NULL이지?
void func (int val) { val = 100; } 해놓고 func(var); 한 거랑 마찬가지. 니 경우는 int 대신 Header *
원본 변수도 수정하려면 받을 때 Header **로 해서 받아야지.
엥? 이게 그거랑 같은거라고? 포인터를 넘겨서 동적할당하고 그 포인터의 값의 멤버들을 수정하는건데 똑같은 개념인거?
void func(int* val) { val = 100;} 생각한건데
*val = 100;
너가 원하는 건 함수 호출 시 넘겨준 포인터 변수의 값이 바뀌는 거잖아. 그럼 포인터의 포인터로 해서 포인터 변수 자체를 가리키는 포인터를 인자로 취해야지.
니가 하고 있는 짓은. void func (int *aa) { ... } int *var; func (var);
header->data; 라는게 (*header).data;랑 같은 의미잖아. 그럼 저게 주소를 넘겨서 값을 수정하는건데 내가 잘못아는거야?
누구, 저요?
포인터 변수의 값을 카피해서 함수에 넘겨줄 뿐 포인터 변수를 넘긴게 아님.
헐 골치아프네
이봐 친구! 포인터 지랄의 왕이다!
파라메터 header 에는 caller쪽 포인터가 가리키는 주소가 들어감. 함수에서 malloc하면 포인터가 가리키는 주소에 할당된 메모리 주소가 들어감. 즉 caller 쪽 포인터가 가리키는 대상은 변함이 없음. 이중포인터 안쓰고, caller쪽 포인터가 가리키는 대상을 포인터로해서 다시 가리키는 곳을 찾아와도 되는데.. 병신짓이지.. ㅋㅋ
내가써놓고 봐도.. 뭔말인가하네.. ㅋㅋㅋ
그냥 이중포인터 써서.. 포인터 변수의 주소를 넘겨
그럼 malloc하는 순간에 호출한 쪽의 레퍼런스와 함수 내의 레퍼런스가 서로 달라진다는거네? 음...
레퍼런스가 달라진다기 보다 주소값이 다르겠지잉