gpt4 book ai didi

C将未知大小的数组传递给单个变量中的函数

转载 作者:行者123 更新时间:2023-12-02 03:36:28 24 4
gpt4 key购买 nike

在 C 中,我必须将数组传递给单个变量中的函数,并且在程序运行之前不知道数组的大小。纸上解决方案是在数组中添加一个额外的元素,您将在其中存储数组的大小(我认为这称为“哨兵值”)。好的,但是我在实现这个时遇到了问题。

将 array[] 作为函数参数传递似乎不起作用。我想我可以发送一个指向第一个元素的指针,但是我如何访问数组的其余部分?

最佳答案

在 C 中,在大多数情况下,数组衰减为指向其第一个元素的指针:

6.3.2.1 Lvalues, arrays, and function designators

[...] Except when it is the operand of the sizeof operator, the _Alignof operator, or the unary & operator, or is a string literal used to initialize an array, an expression that has type ‘‘array of type’’ is converted to an expression with type ‘‘pointer to type’’ that points to the initial element of the array object and is not an lvalue. If the array object has register storage class, the behavior is undefined.



这很有用,因为数组索引 a[i] , 使用指针算法定义: *(a+i) .
因此,您可以在指针上使用与在数组上相同的操作。
不过,这种一致性有一个缺点:如果不将数组包装在 struct 中,就不能按值传递数组。 .

接下来,一个 sentinel是用作停止标记的元素类型的无效值,例如字符串 0 和指针主要是 NULL .
您实际描述的是一个计数数组,其长度位于索引 ((size_t*)a)[-1] 前或一些这样的。

关于C将未知大小的数组传递给单个变量中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23208567/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com