指针的自加自减运算不同于普通变量,并非简单的加1减1。举例:
#include<stdio.h>
#include<stdlib.h>
/* 指针自加自减运算 */
/* written by Chen Gengru */
/* updated on 2019-1-2 */
void main()
{
int i, *iPointer = &i;
short j, *sPointer = &j;
double k, *dPointer = &k;
scanf("%d%d%d", iPointer, sPointer, dPointer);
printf("\nint:\n");
printf("p = %d\n", iPointer);
iPointer ++;
printf("p++ = %d\n", iPointer);
printf("\nshort:\n");
printf("p = %d\n", sPointer);
sPointer ++;
printf("p++ = %d\n", sPointer);
printf("\ndouble:\n");
printf("p = %d\n", dPointer);
dPointer ++;
printf("p++ = %d\n", dPointer);
}
结果:
基本整形变量i在内存中占4个字节,指针iPointer是指向变量i的地址的,这里的p++不是简单的在地址上加1,而是指向下一个存放基本整数类型的地址。如图所示,因为变量i是基本整数类型,所以执行p++后,iPointer的值增加4个字节,j被定义成短整型,所以sPointer的值增加2,k被定义成双精度型,所以dPointer的值增加8个字节