鱼C论坛

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

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

[复制链接]
最佳答案
0 
发表于 6 天前 | 显示全部楼层 |阅读模式

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

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

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

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

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


第一图片不能通过

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

传参的时候其实退化成了指针,等于说是char* a = b;
而且数组名是不可修改的左值 ,所以就会出现char a[] = b;报错
两个数组之间并不支持互相赋值的
G2XS9B`A1WLNSURJKXGKAWO.png
98@_7~KHPG50RTNK4T05)PD.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
913 
发表于 6 天前 | 显示全部楼层
函数里面并没有执行char a[] = b啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 6 天前 | 显示全部楼层
qiuyouzhi 发表于 2020-6-30 17:46
函数里面并没有执行char a[] = b啊

传递过程不就是在赋值吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
913 
发表于 6 天前 | 显示全部楼层
爱学习520 发表于 2020-6-30 17:47
传递过程不就是在赋值吗

或许编译器内部做了某些操作?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
18 
发表于 6 天前 | 显示全部楼层    本楼为最佳答案   
爱学习520 发表于 2020-6-30 17:47
传递过程不就是在赋值吗

传参的时候其实退化成了指针,等于说是char* a = b;
而且数组名是不可修改的左值 ,所以就会出现char a[] = b;报错
两个数组之间并不支持互相赋值的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
0 
 楼主| 发表于 6 天前 | 显示全部楼层
CodingCat_k 发表于 2020-6-30 17:53
传参的时候其实退化成了指针,等于说是char* a = b;
而且数组名是不可修改的左值 ,所以就会出现char a[ ...

传参的时候其实退化成了指针,等于说是char* a = b;请问这句是在C语言哪里有说明,我想进一步看到相关内容
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
321 
发表于 6 天前 | 显示全部楼层
爱学习520 发表于 2020-6-30 17:58
传参的时候其实退化成了指针,等于说是char* a = b;请问这句是在C语言哪里有说明,我想进一步看到相关内 ...


数组作为参数时会强制退化为指针
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
18 
发表于 6 天前 | 显示全部楼层
爱学习520 发表于 2020-6-30 17:58
传参的时候其实退化成了指针,等于说是char* a = b;请问这句是在C语言哪里有说明,我想进一步看到相关内 ...

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

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

GMT+8, 2020-7-6 16:12

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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