답변 감사드립니다.
제가 이해가 안되면 그 뒤로 못넘어가는 성격이라.. 자꾸 앞에꺼랑 비교해서
이해가 안되면 머물게 되네요..
열공하겠습니다.
안녕하세요
마지막으로 63.10에 대하여 질문이 있습니다
63.3 parameter_double_pointer.c과
63.10 judge_parameter_double_pointer.c이 거의 동일한 예제인데
63.3에는 (void**) 이중포인터 임시 형변환이 안들어갔더라구요
그 이유를 알수있을까요?
당연하지만 63.3에 (void**)를 추가해도 결과가 잘 나오더라구요
자꾸 질문해서 죄송합니다
감사합니다.
63.10 judge_parameter_double_pointer.c
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
void allocArray(void** ptr, int num, int size)
{
*ptr = malloc(size * num);
}
int main()
{
long long* numArr1;
int* numArr2;
allocArray((void**)&numArr1, 10, sizeof(long long));
allocArray((void**)&numArr2, 3, sizeof(int));
scanf("%lld %d", &numArr1[9], &numArr2[2]);
printf("%lld %d\n", numArr1[9], numArr2[2]);
free(numArr2);
free(numArr1);
return 0;
}
63.3 parameter_double_pointer.c
#include <stdio.h>
#include <stdlib.h>
void allocMemory(void** ptr, int size)
{
*ptr = malloc(size);
}
int main()
{
long long* numPtr;
allocMemory(&numPtr, sizeof(long long));
*numPtr = 10;
printf("%lld\n", *numPtr);
free(numPtr);
return 0;
}
(void**)이 들어가야 맞습니다.
오탈자로 등록하고, 종이책에는 다음 쇄에 반영하겠습니다.
현재 (void**)이 없는 상태에서는 무시할 수는 있지만, 경고가 발생합니다.
main.c:14:17: warning: incompatible pointer types passing 'long long **' to parameter of type 'void **' [-Wincompatible-pointer-types] allocMemory(&numPtr, sizeof(long long)); ^~~~~~~ main.c:4:25: note: passing argument to parameter 'ptr' here void allocMemory(void **ptr, int size) // 반환값 없음, void 이중 포인터 매개변수 지정 ^ 1 warning generated.
예제에서 (void**)이 들어가는 게 맞습니다.