Re: 61.12 심사문제 질문
, 도장_ 관리자님이 작성UNIT 59.2를 보면
numPtrB = numPtrA + 1; // 포인터 연산. numPtrA + 4바이트
numPtrC = numPtrA + 2; // 포인터 연산. numPtrA + 8바이트
이와 같은 관계가 성립합니다.
printf("%d\n", *numPtrB); // 22: 역참조로 값을 가져옴, numArr[1]과 같음
printf("%d\n", *numPtrC); // 33: 역참조로 값을 가져옴, numArr[2]와 같음
배열은 동적으로 할당하지 못합니다. 동적 할당인 포인터를 사용해서 배열에 사용할 메모리를 할당합니다. 포인터로 할당한 메모리 공간을 배열 첨자로 접근하는 방식이나 포인터 연산으로 접근하는 방식이나 같습니다.
ptr[1]로 접근하거나 *(ptr + 1)로 접근하거나 같습니다.
문제에서 stats[1]이나 *(stats + 1)이라 같습니다.
문제에서
*(stats+1) = 115.8776f;
이렇게 바꿔도 잘 동작합니다.
*(1+stats) = 115.8776f;
이를 응용해서 가끔 초보자를 골탕먹이려는 사람들은 의도적으로 다음과 같은 코드를 작성하기도 합니다.
1[stats] = 115.8776f;
마찬가지로 stats[0]은 0[stats]로 써도 동작합니다.
첨자 연산자 [ ]는 포인터 연산의 편리한 표기법으로 이해하면 됩니다.