鱼C论坛

 找回密码
 立即注册
查看: 813|回复: 8

[已解决]实在不理解这个数组问题

[复制链接]
发表于 2020-6-30 17:44:14 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 爱学习520 于 2020-6-30 17:47 编辑

为什么char b[]=a可以在函数通过,a是一个数组名,是个常量啊,常量不能赋值啊

对比两张图,这不是自相矛盾吗


第一图片不能通过

第二张图片可以通过
最佳答案
2020-6-30 17:53:15
爱学习520 发表于 2020-6-30 17:47
传递过程不就是在赋值吗

传参的时候其实退化成了指针,等于说是char* a = b;
而且数组名是不可修改的左值 ,所以就会出现char a[] = b;报错
两个数组之间并不支持互相赋值的
G2XS9B`A1WLNSURJKXGKAWO.png
98@_7~KHPG50RTNK4T05)PD.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-30 17:46:35 | 显示全部楼层
函数里面并没有执行char a[] = b啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-30 17:47:26 | 显示全部楼层
qiuyouzhi 发表于 2020-6-30 17:46
函数里面并没有执行char a[] = b啊

传递过程不就是在赋值吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-30 17:51:24 | 显示全部楼层
爱学习520 发表于 2020-6-30 17:47
传递过程不就是在赋值吗

或许编译器内部做了某些操作?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-30 17:53:15 | 显示全部楼层    本楼为最佳答案   
爱学习520 发表于 2020-6-30 17:47
传递过程不就是在赋值吗

传参的时候其实退化成了指针,等于说是char* a = b;
而且数组名是不可修改的左值 ,所以就会出现char a[] = b;报错
两个数组之间并不支持互相赋值的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-30 17:58:03 | 显示全部楼层
CodingCat_k 发表于 2020-6-30 17:53
传参的时候其实退化成了指针,等于说是char* a = b;
而且数组名是不可修改的左值 ,所以就会出现char a[ ...

传参的时候其实退化成了指针,等于说是char* a = b;请问这句是在C语言哪里有说明,我想进一步看到相关内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-30 18:26:15 | 显示全部楼层
爱学习520 发表于 2020-6-30 17:58
传参的时候其实退化成了指针,等于说是char* a = b;请问这句是在C语言哪里有说明,我想进一步看到相关内 ...


数组作为参数时会强制退化为指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-30 18:59:41 | 显示全部楼层
爱学习520 发表于 2020-6-30 17:58
传参的时候其实退化成了指针,等于说是char* a = b;请问这句是在C语言哪里有说明,我想进一步看到相关内 ...

参见《C专家编程》或《C与指针》;
当然也可以自己测试出来的,比如给函数传递不同类型的参数(如:数组名,指针,指向数组的指针等等)

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 06:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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