爱学习520 发表于 2020-6-30 17:44:14

实在不理解这个数组问题

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

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

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

第一图片不能通过

第二张图片可以通过

qiuyouzhi 发表于 2020-6-30 17:46:35

函数里面并没有执行char a[] = b啊

爱学习520 发表于 2020-6-30 17:47:26

qiuyouzhi 发表于 2020-6-30 17:46
函数里面并没有执行char a[] = b啊

传递过程不就是在赋值吗

qiuyouzhi 发表于 2020-6-30 17:51:24

爱学习520 发表于 2020-6-30 17:47
传递过程不就是在赋值吗

或许编译器内部做了某些操作?

CodingCat_k 发表于 2020-6-30 17:53:15

爱学习520 发表于 2020-6-30 17:47
传递过程不就是在赋值吗

传参的时候其实退化成了指针,等于说是char* a = b;
而且数组名是不可修改的左值 ,所以就会出现char a[] = b;报错
两个数组之间并不支持互相赋值的

爱学习520 发表于 2020-6-30 17:58:03

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

传参的时候其实退化成了指针,等于说是char* a = b;请问这句是在C语言哪里有说明,我想进一步看到相关内容

永恒的蓝色梦想 发表于 2020-6-30 18:26:15

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

数组作为参数时会强制退化为指针

CodingCat_k 发表于 2020-6-30 18:59:41

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

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

页: [1]
查看完整版本: 实在不理解这个数组问题