#include <stdio.h>
#include <stdlib.h>
int main()
{
float *pf;
float m[][3]={
{0.1, 0.2, 0.3},
{0.4, 0.5, 0.6},
{0.7, 0.8, 0.9}
};
printf("%d \n",sizeof(m));
pf=m[1];
printf("%f %f %f \n",*pf, *(pf+1), *(pf+2));
printf("%f %f %f \n",*pf, *(pf++), *(pf++));
}
두 번째 마지막 printf의 출력을 이해합니다. 내가 틀렸다면 나를 바로 잡아주세요. 포인터 pf는 m [1]의 첫 번째 요소의 주소를 저장합니다. * pf는 첫 번째 요소로 이동하여 0.4, * (pf + 1) 증분을 출력하고 다음 요소 주소로 점프하고 그 요소를 출력합니다. 내가 얻지 못하는 것은 마지막 printf입니다. 비슷한 것이 아니어야합니다. 마지막으로 printf * pf가 pf에 저장된 주소 (m [1]의 첫 번째 요소와 동일)로 이동하므로 출력은 0.4가되어야하지만 대신 출력은 0.6입니다. * (pf ++)는 다음 요소로 증가하고 두 번째 요소, 즉 0.5를 출력하고 마지막 요소는 (pf ++)는 0.5를 출력해야하지만 대신 0.4를 출력해야합니다. 내가 정말로 혼란 스럽다고 설명해주세요.포인터가 1,2,3 또는 배열 증가 후 증가합니다.
배열 크기는 항목 수가 아닌 바이트로보고됩니다. 귀하의 (더블) 배열은 각각 4 바이트에 9 개의 항목이 있습니다. – kaylum
배열'm'에서 th 번째 항목을 얻으려면'sizeof (m)/sizeof (* m)'를 사용하십시오. –
"* 나는 정말로 혼란 스럽다. *"그러나 포인터 때문이 아니라'++ '연산자가 어떻게 작동하는지 이해하지 못하는 것 같다. 그것에 대해 읽고'int', 배열 없음, 포인터가없는 간단한 예제로 돌아가십시오. – alk