C语言数组定义时不初始化为啥会报错

先定义int ages;或int ages;再一个一个赋值是可以的,这不可能。请如实描述问题,没有人能回答虚假的问题。
■网友
如果你在定以后数组再用"="赋值,这个"="运算符只做一件事情就是把右边那货的地址给左边这货。{1, 2, 3, 4, 5}这条语句执行结果不是一个物件(或者根本没法执行),没有单一的地址,只是会在定义的时候会被按照特殊规则解释的语句。编译器在执行到"ages={1, 2, 3, 4, 5};"的时候尝试去先执行"="右边的语句,发现这货的结果不是我要的指针(或者是我不认识右边这货,除非是在定义语句),所以报错了。"编译器会默认认为我在操作ages的那块内存吗?"不会。先不谈这一个问题,首先这有一个概念性错误。我先来解释一下最后一个问题中的一小部分:""这货是做啥的。你可以认为这货是一个Dereference运算符,它的任务是:1.到这块内存地址,抓返回。2.到这块内存地址,把放上去。除非你存储的是一个指针的数组,通常情况下xx的结果只是那个数组中元素的值,不再是指针了。"ages ="这是在操作ages的内容,ages本身有自己的地址,它的内容是那个数组的地址。所以ages=与ages毫无关系。只能说ages与\u0026amp;(ages)的值相等,是可以相提并论的东西。调用函数时为什么是functionName(数组名);
【C语言数组定义时不初始化为啥会报错】 而不是functionName(数组名);
传参数的时候如果函数要的是一个数组的话,那么它接收的只是一个4字节长的地址(数组第一个元素的的指针)。
像我之前所说的,数组名,也就是ages,它的值是数组第一个元素的地址,正式函数想要的。
"数组名"这个会运行Dereference运算符,会把地址相对应的值抓出来,而不再是地址了。
"如在函数内计算数组元素个数。。。有什么解决办法?"
如果不事先约定数组固定的长度,在函数内获取的话,通常有两种解决办法。
一,约定一个终止符。最好的例子就是一个由char数组组成的字串,事先约定好"\\0"是数组的终止符,在函数内我们从数组头部遍历数组,碰到了终止符就知道数组的长度了。
二,我们让函数多接受一个参数,这个参数里写上传进去数组的长度。

■网友
更新一下答案,对昨天没给你说明白的事情,再解释一下:对于 C 编译器并不认可这种赋值行为 int a; a={1,2,3} 这个原因是这样:1,在表达式 a={1,2,3} 中,a 会被解读为指向数组首元素地址的指针。也就是在这条语句时存在 a 被解读为 int *,好了,到这一步,你就明白为何不能赋值了。这个地方牵扯一个左值的问题 (lvalue - locator value),这地方有这么一句话,“当数组被解读为指针时,此指针无法作为表达式左值使用”,既然无法做左值,也就没有赋值一说了。当然这句话有例外情况,不过目前就不往远了扯了,直接给你看这种情况的例子。关键就在于编译器是否将 a 解读为指针,如果不解读,当然你的赋值就没有问题了。int a;1. sizeof(a)2. \u0026amp;a========================================================================1, C 编译器并不认可这种赋值行为 ages = {1,2,3,4,5}; 而这种是对的 *ages = 1; *(ages+1)=2;2, 什么叫默认你传得 ages?在C里,在函数声明中,func(int *c) 的 c 可以解读为指向一个 int 数组首元素的指针,这时是等价的。无论是 func(int c) , 还是 func(int c) 编译器都理解为 func(int *c) 。如果你一定要指定长度限制,你需要的是 func(int (*c1))。这时,c1 是指向一个有五个元素的 int 数组的指针。虽然,从地址来讲,可能都是一样,但是使用起来是不一样的,指向数组首元素的指针和指向数组的指针是两码事,考虑 (c+1) 和 (c1+1) 对于 32bit int 来说,c+1 是往后移动 4 个字节 (32bit) 但是 c1+1 是向后移动 4*5 个字节 (160bit)。 3,func(int *c) 在方法中,可以通过 c 改变数组内部数据。你所谓的不能在函数内部操作数组是错误的。你应该去了解 passby value 和 passby reference,在 C 中,func(int *c) 确实是一个 passby value,即将数组首元素地址拷贝到方法中,你可以通过地址操作原数组,但是你不能够通过在函数中重新给 c 赋值从而改变原数组。4,这些问题很基础,我这是第一次也是最后一次回答你这类问题,以后多看书多使用 Google,StackOverFlow 上这种问题你到处都能查到答案。


推荐阅读