我们前面知道char类型是占一个字节。
所以当我们使用指针 p + 1 就去到下一个字节。下一个字节就读取下一个字节的字符。
#include
int main(void)
{
char multiple[10];
scanf("%s",multiple);//可以不需要取地址符 数组名本身就是地址
char *p = multiple; //&multiple[0]
printf("%c\n",*p);
printf("%c\n",*(p+1));
return 0;
}
但是如果是其他类型,比如long类型 不是占用一个字节,而是四个字节
这时候,如果我们要读取下个元素,是否是p+4?还是?
大家思考一下这个问题。
下面看我们这个例子#include
int main(void)
{
long multiple[] = {15L, 25L, 35L, 45L};
long * p = multiple;
for(int i = 0 ; i
{
printf("\n地址 p+%d (&multiple[%d]): %d *(p+%d) 值: %d",
i, i, p+i, i, *(p+i));
}
printf("\n long类型占: %d bytes\n", sizeof(long));
return 0;
}
上面代码,
p是6422016 p+1本来我们觉得应该是6422017 但是它实际上是6422020
所以p+1比p是大了4 而不是1
这里是编译器帮我们来计算 编译器根据指针类型 long 然后 决定了是4.
就是因为我们的指针是long类型指针long * p
所以 当我们 p+1 的时候 编译器知道是long类型 然后知道它4个字节 所以虽然是p+1 但是 编译器自动跳转四个字节