鱼C论坛

 找回密码
 立即注册
查看: 1107|回复: 3

[已解决]关于指针和数组的问题

[复制链接]
发表于 2021-4-16 15:41:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>

void main()
{
        int i, a[5]={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]={5,6,7,8,9};
        int *p1;
        p1=a;
        for (i=0; i<5; i++)
        printf("%d",*(a+i));
}

请问输出的时候 *(&a+1)  出来的数 和 *(a+1)怎么是不一样的       小白求助
最佳答案
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的范围内了,这时解引用输出的数字完全不可预测
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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的范围内了,这时解引用输出的数字完全不可预测
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-4-16 16:54:03 | 显示全部楼层
p1=&a; 这句话不对吧,我在devc++上编译报错,类型不匹配,&a是(*)[]类型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 17:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表