c语言函数 参数数组的长度,函数参数中的数组长度

e996a87aba8c35b85c574901c99f8229.png

杨魅力

sizeof只有在将数组应用于原始数组时,才能找到数组的长度。int a[5]; //real array. NOT a pointersizeof(a); // :)但是,当数组衰变为指针时,大小将给出指针的大小,而不是数组的大小。int a[5];int * p = a;sizeof(p); // :(正如您已经很清楚地指出的那样,main作为参数接收数组的长度(ARGC)。是的,这是出于必要,不是多余的。..(嗯,它有点红,因为argv被一个空指针很方便地结束了,但是我偏离了)。对于为什么会发生这种情况,有一些理由。我们怎样才能使一个C数组也知道它的长度呢?第一个想法是不要让数组在传递给函数时衰减到指针中,并且在类型系统中继续保持数组长度。这样做的不好之处在于,您需要为每个可能的数组长度设置一个单独的函数,这样做并不是一个好主意。(帕斯卡做了这件事,有些人认为这是它“输给”C的原因之一)第二个想法是将数组长度存储在数组旁边,就像现代编程语言所做的那样:a -> [5];[0,0,0,0,0]但是你只是在创造一个无形的struct幕后和C哲学不赞成这种开销。尽管如此,自己创建这样一个结构通常是解决某些问题的一个好主意:struct {

    size_t length;

    int * elements;}您可以考虑的另一件事是,C中的字符串是如何终止的,而不是存储长度(就像Pascal中的那样)。要存储长度而不必担心限制,需要一个扑通四个字节,这是一个难以想象的代价(至少在当时)。人们可能想知道数组是否也可以像那样以空结尾,但是如何允许数组存储空值呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值