在 C 中,我必须将数组传递给单个变量中的函数,并且在程序运行之前不知道数组的大小。纸上解决方案是在数组中添加一个额外的元素,用于存储数组的大小(我认为这称为“哨兵值”)。好的,但我在实现这个时遇到问题。
将 array[] 作为函数参数传递似乎不起作用。我想我可以发送一个指向第一个元素的指针,但是如何访问数组的其余部分?
在 C 语言中,在大多数情况下,数组会衰减为指向其第一个元素的指针:
6.3.2.1 左值、数组和函数指示符
[...]除非它是sizeof运营商,_Alignof运算符,或
一元&运算符,or 是用于初始化数组的字符串文字,是一个具有
类型“类型数组”转换为“指向类型的指针”类型的表达式那点
到数组对象的初始元素并且不是左值。如果数组对象有
注册存储类,行为未定义。
这很有用,因为数组索引a[i]
,使用指针算术定义:*(a+i)
.
因此,您可以对指针使用与对数组相同的操作。
不过,这种一致性有一个缺点:如果不将数组包装在一个数组中,就无法按值传递数组。struct
.
Next, a sentinel
是用作停止标记的元素类型的无效值,例如字符串 0 和指针大多NULL
.
您实际上描述的是一个计数数组,其长度前置在索引处((size_t*)a)[-1]
或一些这样的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)