다음 프로그램에서 여기 ptr
정수 포인터에 대한 포인터로 선언되었으며 정수 포인터의 배열로 선언 된 p[]
배열의 기본 주소가 할당되었습니다. ptr
이 증가하고 ptr++
다음에 ptr
이 증가하기 전에 주소 9016
(p의 시작 주소가 9016이라고 가정)이 있다고 가정하면 값 9020이 포함됩니다 (int가 4 바이트를 차지한다고 가정).포인터 연산이 잘못 출력 됨
그래서 ptr-p
은 출력을 4 (9020-9016 = 4)로 지정해야합니다. 그러나 출력은 1로 표시됩니다. 왜?
#include<stdio.h>
int main()
{
static int a[]={0,1,2,3,4};
static int *p[]={a,a+1,a+2,a+3,a+4};
int **ptr=p;
ptr++;
printf("%d",ptr-p);
return 0;
}
포인터를 정수 유형으로 개별적으로 캐스팅 한 다음 뺍니다. –