他们是否总是传递大小作为参数,例如
void lame_function (int * arr, int n)
{
// .. do something
}
或是否有一个技巧让编译器在函数内运行sizeof(arr)
的方式与在函数外部运行它的方式相同?
我已经尝试过制作签名
了void lame_attempt (int ** arr, int n)
{
// ... use sizeof(*arr);
}
并试图像
一样使用它int myArray [] = {1, 50, 39, 22};
lame_attempt ( &myArray );
但那并没有奏效。
必须有一种方法,因为如果我是一个禁止用超过1个参数编写函数的宗教成员呢?
有些C程序员做了像
这样的结构typedef struct realArray { int * ptr0; int len; } realArray;
并在整个计划中使用它?
答案 0 :(得分:0)
无法获得通过指针或C中的引用传递的数组的大小。
原因是,C只知道函数签名中的内容。任何人都可以使用与签名匹配的任何类型的数组来调用此函数。
简而言之:如果您不想拥有多个参数,则必须始终传递结构。许多库都是这样做的,它们为更复杂的数据结构传递结构。
在这种情况下,C字符串是特殊的。在大多数情况下,它们通过的时间不会很长,这是因为按照惯例,它们必须由“0”和“0”完成。字符。这也使它们变得危险,因为当你忘记这个最终字符或保留太少的内存(经常出现的错误)时,你的代码就会崩溃。