1
121
在C中,数组作为指向第一个元素的指针传递。它们是唯一不按值传递的元素(指针按值传递,但不复制数组)。允许被调用函数修改内容。
现在,如果您想要的是更改数组本身(元素数…),那么就不能使用堆栈或全局数组,只能使用堆中动态分配的内存。在这种情况下,如果要更改指针,必须向其传递指针:
在问题edit中,您特别询问有关传递结构数组的问题。这里有两个解决方案:声明typedef,或显式地表示正在传递结构:
您可以在声明类型时对其进行typedef(这是C语言中的常见习惯用法):
|
2
11
在这里展开一些答案… 在C语言中,当数组标识符出现在上下文中而不是作为操作数出现在&或sizeof中时,该标识符的类型将从“n元素数组t”隐式转换为“指向t的指针”,其值将隐式设置为数组中第一个元素的地址(与数组本身的地址相同)。这就是为什么当您将数组标识符作为参数传递给函数时,该函数接收到指向基类型的指针,而不是数组。由于不能通过查看指向第一个元素的指针来判断数组有多大,因此必须将大小作为单独的参数传入。
有两种将数组传递给函数的可选方法。 存在一个指向t数组的指针,而不是指向t的指针。
在这种情况下,p是指向t的n元素数组的指针(与t*p[n]相反,p是指向t的n元素数组)。因此,您可以向数组传递一个指针,而不是向第一个元素传递一个指针:
这种方法的缺点是数组大小是固定的,因为指向t的10元素数组的指针与指向t的20元素数组的指针的类型不同。 第三种方法是将数组包装在结构中:
这种方法的优点是你不需要用指针。缺点是数组的大小是固定的(同样,T的10元素数组与T的20元素数组是不同的类型)。 |
3
8
C语言不支持任何类型的传递引用。最接近的等价物是向类型传递指针。 这两种语言都有一个人为的例子 C++风格的API
最接近的C当量
|
4
7
另外,请注意,如果要在方法中创建数组,则不能返回该数组。如果返回指向它的指针,则当函数返回时,它将从堆栈中移除。 必须将内存分配到堆上并返回指向该堆的指针。 如。
|
5
6
在纯C语言中,您可以在API中使用指针/大小组合。
使用指针最接近C中可用的引用调用。 |
6
6
默认情况下,数组通过引用有效传递。实际上,将传递指向第一个元素的指针的值。因此,接收该命令的函数或方法可以修改数组中的值。
两个调用相等,退出值应为0; |
7
2
嘿,伙计们,这里有一个简单的测试程序,演示如何使用new或malloc分配和传递数组。只需剪切、粘贴并运行即可。玩得高兴!
|
Toniq · javascript为php保存多维数组 1 年前 |
Jannis · Java中数组的怪异行为 1 年前 |
callum · 如何识别数组中与给定序列不匹配的元素? 1 年前 |
tenfour · 如何使用数组元素的索引初始化数组元素 2 年前 |
Guillaume · 使用操作从Python列表创建numpy数组 2 年前 |
maxMas · Swift 5:为什么会出现索引超出范围错误? 2 年前 |