g1063496360 发表于 2021-4-16 15:41:58

关于指针和数组的问题

#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:55:43

本帖最后由 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的范围内了,这时解引用输出的数字完全不可预测

g1063496360 发表于 2021-4-16 15:57:24

yuxijian2020 发表于 2021-4-16 15:55
a是一个数组,保存了5个int类型的数据
同时a也是数组首个元素的地址
*( a + 1)   代表的是首个元素地址+1 ...

谢谢!{:10_288:}

dysow 发表于 2021-4-16 16:54:03

p1=&a; 这句话不对吧,我在devc++上编译报错,类型不匹配,&a是(*)[]类型
页: [1]
查看完整版本: 关于指针和数组的问题