关于指针和数组的问题
#include <stdio.h>void main()
{
int i, a={5,6,7,8,9};
int *p1;
p1=&a;
for (i=0; i<5; i++)
printf("%d",*(&a+i));
}
#include <stdio.h>
void main()
{
int i, a={5,6,7,8,9};
int *p1;
p1=a;
for (i=0; i<5; i++)
printf("%d",*(a+i));
}
请问输出的时候 *(&a+1)出来的数 和 *(a+1)怎么是不一样的 小白求助 本帖最后由 yuxijian2020 于 2021-4-16 15:56 编辑
a是一个数组,保存了5个int类型的数据
同时a也是数组首个元素的地址
*( a + 1) 代表的是首个元素地址+1 然后再解引用 这里的地址+1是对 int *的地址+1
也就是说实际上指针向后移动了4个字节
&a 这是取数组a的地址,&a + 1这时 是对 整个数组的地址+1
还记得a是啥么?a是保存了5个int类型数据的数组所以a的大小是 4 * 5个字节
所以&a + 1其实是向后移动了20个字节
所以,*(&a + 1) 其实已经不在数组a的范围内了,这时解引用输出的数字完全不可预测 yuxijian2020 发表于 2021-4-16 15:55
a是一个数组,保存了5个int类型的数据
同时a也是数组首个元素的地址
*( a + 1) 代表的是首个元素地址+1 ...
谢谢!{:10_288:} p1=&a; 这句话不对吧,我在devc++上编译报错,类型不匹配,&a是(*)[]类型
页:
[1]