我在运行时创建了两个整数数组(大小取决于程序输入)。在某些时候,我需要用另一个做一些计算的内容来更新一个数组的内容。
首先,我考虑将这些数组作为参数传递给函数,因为我没有找到在 C 中返回函数的方法(不认为这是可能的)。在意识到这是一个坏主意后,因为参数在被复制到堆栈时无法真正修改,所以我改用数组指针。
虽然该函数仍然是空的,但这是我拥有的代码:
第一次拍摄(代码编译,没有错误):
// Elements is just to be able to iterate through their contents (same for both):
void do_stuff(int first[], int second[], int elements) {}
// Call to the function:
do_stuff(first, second, elements);
第二次,尝试转换为能够修改数组的指针:
void do_stuff(int *first[], int *second[], int elements) {}
// Call to the function:
do_stuff(&first, &second, elements);
这段代码导致了一些正当的编译时错误,因为显然我认为指向数组的指针是指针数组。
第三次,我认为这是正确的语法:
void do_stuff(int (*first)[], int (*second)[], int elements) {}
// Call to the function:
do_stuff(&first, &second, elements);
当尝试访问数组的元素(例如*first[0]
)时,此代码仍然会产生编译时错误:
error: invalid use of array with unspecified bounds
所以我的问题是关于使用数组指针作为函数参数的可能性,这可能吗?如果是这样,怎么可能做到?
无论如何,如果您在执行涉及第二个内容的计算后想到更新第一个数组的更好方法,请对此发表评论。