c语言将数组初始化为1_C语言数组定义时不初始化为什么会报错?

如果你在定以后数组再用"="赋值,这个"="运算符只做一件事情就是把右边那货的地址给左边这货。{1, 2, 3, 4, 5}这条语句执行结果不是一个物件(或者根本没法执行),没有单一的地址,只是会在定义的时候会被按照特殊规则解释的语句。

编译器在执行到"ages={1, 2, 3, 4, 5};"的时候尝试去先执行"="右边的语句,发现这货的结果不是我要的指针(或者是我不认识右边这货,除非是在定义语句),所以报错了。

"编译器会默认认为我在操作ages[0]的那块内存吗?"

不会。

先不谈这一个问题,首先这有一个概念性错误。我先来解释一下最后一个问题中的一小部分:"[]"这货是做啥的。你可以认为这货是一个Dereference运算符,它的任务是:

1.到这块内存地址,抓[东西]返回。

2.到这块内存地址,把[东西]放上去。

除非你存储的是一个指针的数组,通常情况下xx[x]的结果只是那个数组中元素的值,不再是指针了。

"ages ="这是在操作ages的内容,ages本身有自己的地址,它的内容是那个数组的地址。所以ages=与ages[0]毫无关系。只能说ages与&(ages[0])的值相等,是可以相提并论的东西。

调用函数时为什么是functionName(数组名);

而不是functionName(数组名[空/个数]);

传参数的时候如果函数要的是一个数组的话,那么它接收的只是一个4字节长的地址(数组第一个元素的的指针)。

像我之前所说的,数组名,也就是ages,它的值是数组第一个元素的地址,正式函数想要的。

"数组名[空/个数/whatever]"这个会运行Dereference运算符,会把地址相对应的值抓出来,而不再是地址了。

"如在函数内计算数组元素个数。。。有什么解决办法?"

如果不事先约定数组固定的长度,在函数内获取的话,通常有两种解决办法。

一,约定一个终止符。最好的例子就是一个由char数组组成的字串,事先约定好"\0"是数组的终止符,在函数内我们从数组头部遍历数组,碰到了终止符就知道数组的长度了。

二,我们让函数多接受一个参数,这个参数里写上传进去数组的长度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值