왜 배열 포인터는 출력할 때 *을 안붙이나요?
, 호옹 이님이 작성int main()
{
int** m = malloc(sizeof(int*) * 3);
for (int i = 0; i < 3; i++)
{ m[i] = malloc(sizeof(int) * 4); }
m[0][0] = 1;
m[2][0] = 5;
m[2][3] = 2;
printf("%d\n", m[0][0]);
printf("%d\n", m[2][0]);
printf("%d\n", m[2][3]);
for(int i=0; i<3; i++)
{ free(m[i]); }
free(m);
return 0;
}
38.2와 38.3 예제를 보면 포인터를 잡아놓고 정작 출력할 때는 *를 안붙여주는데 왜 그런건가요?
Re: 왜 배열 포인터는 출력할 때 *을 안붙이나요?
, 도장_ 관리자님이 작성상단 고정 글에 C 언어 시각화 사이트를 이용해서 실험해보세요.
그림 38-3에도 설명되어 있지만, 그림 위에 있는 타입의 변화를 살펴보세요.
int ** -> int * -> int입니다.
m의 타입은 int**이고, m[0]의 타입은 int*이고, m[0][0]의 타입은 int입니다.
m[0][0]의 타입은 int이므로 포인터가 아닙니다. 따라서 *를 쓰지 않아도 됩니다.