在C语言中char类型数据指针如果++或是+1,表示把指针向后移到下一个字节上,指针地址值增加1
但是如果是int类型数据指针++呢!指针也是只向后移动一个字节吗?指针地址还是+1吗?
1 #include <stdlib.h> 2 3 int main() 4 { 5 char dc[16] = {0}; 6 short ds[16] = {0}; 7 int di[16] = {0}; 8 long dl[16] = {0}; 9 10 char *dc_p = dc; 11 short *ds_p = ds; 12 int *di_p = di; 13 long *dl_p = dl; 14 15 printf("Hello, World! [%d\t%d\t%d\t%d]\r\n\r\n", sizeof dc, sizeof ds, sizeof di, sizeof dl); 16 17 printf("Hello, World! [%p\t%p\t%p\t%p]\r\n", dc, ds, di, dl); 18 printf("Hello, World! [%p\t%p\t%p\t%p]\r\n\r\n", dc+1, ds+1, di+1, dl+1); 19 20 printf("Hello, World! [%p\t%p\t%p\t%p]\r\n", dc_p++, ds_p++, di_p++, dl_p++); 21 printf("Hello, World! [%p\t%p\t%p\t%p]\r\n", dc_p, ds_p, di_p, dl_p); 22 printf("Hello, World! [%p\t%p\t%p\t%p]\r\n", dc_p+1, ds_p+1, di_p+1, dl_p+1); 23 return(0); 24 }

可以看到不同类型的指针在执行+1或++操作后,并不是都简单的只是将指针地址+1
char类型数组一个成员占一个字节所以地址+1
short类型数组一个成员占两个字节所以地址+2
int类型数组一个成员占四个字节所以地址+4
long类型数组一个成员占八个字节所以地址+8
【综上:不同类型的数组指针在做++和+1运算时实质是将指针偏移到下一个成员上了】
下面将数组指针全转成char型指针,再进行++或+1操作所得到的结果(地址+1)


浙公网安备 33010602011771号