鱼C论坛

 找回密码
 立即注册
查看: 1592|回复: 6

[已解决]数组指针

[复制链接]
发表于 2021-9-24 23:04:15 | 显示全部楼层 |阅读模式
5鱼币
#include <stdio.h>

int main()
{
        int temp[5] = {1, 2, 3, 4, 5};
        int (*p2)[5];
        p2=&temp;
        int i;

        for (i = 0; i < 5; i++)
        {
                printf("%d\n", *(*p2 + i));
        }

        return 0;
}


p2=&temp;这行表示p2中保存了数组temp地址的地址(或者是数组首元素的地址的地址,我感觉都是一样的)
在视频的最后结尾处把p2=&temp这行的&符号去掉,运行时虽然有警告但是依然得到了正确答案,这一处我没搞明白,如果加上&,表示把temp的地址(temp代表着数组首元素的地址)也就是地址的地址赋值给p2
,那么下面printf里面的**p很好解释;但是去掉&就变成了p2=temp,这不就变成了向p2里面塞了temp这个地址,*p就可以表示数组temp的元素,那么此时为什么需要**p才能正确输出呢?

最佳答案

查看完整内容

可以看下我写的 https://fishc.com.cn/thread-200275-1-1.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-24 23:04:16 | 显示全部楼层    本楼为最佳答案   
可以看下我写的
https://fishc.com.cn/thread-200275-1-1.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-25 08:18:17 | 显示全部楼层
因为int (*p2)[5],是指向数组名的指针,虽然他跟int *p=temp的结果是一样,但是层次不一样,是指向地址的指针,算是指向指针的指针
&temp要用数组指针类型定义,int (*p) = &temp;  temp要用普通指针定义,int*p = temp
虽然temp跟&temp 的值是一样的,但是意义却不同,所以要用*p抵消&
打印的时候也就要需要两层解引用。
希望能帮助到你。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-9-25 19:03:44 | 显示全部楼层
阿曼达卡格纳德 发表于 2021-9-25 08:18
因为int (*p2)[5],是指向数组名的指针,虽然他跟int *p=temp的结果是一样,但是层次不一样,是指向地址的指 ...

如果说int (*p)[5]=&temp把&去掉的话是算语法错误吗?
编译器在看到有数组指针的时候无论&temp有没有&都会当作地址的地址,然后再给出警告
这个解释对不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-25 19:35:05 | 显示全部楼层
bszs 发表于 2021-9-25 19:03
如果说int (*p)[5]=&temp把&去掉的话是算语法错误吗?
编译器在看到有数组指针的时候无论&temp有没有&都 ...

对啊 类型不同
&temp是 指向整个数组
temp是指向元素类型的指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-9-25 21:32:44 | 显示全部楼层
万千只cnm 发表于 2021-9-25 19:35
可以看下我写的
https://fishc.com.cn/thread-200275-1-1.html

感谢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-25 21:54:54 | 显示全部楼层
开卷有益,多多益善····
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-15 22:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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