【发布时间】:2012-08-29 01:25:10
【问题描述】:
我在运行时创建了两个整数数组(大小取决于程序输入)。在某些时候,我需要用另一个数组的内容进行一些计算来更新数组的内容。
首先我考虑将这些数组作为参数传递给函数,因为我没有找到在 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
所以我的问题是关于使用数组指针作为函数参数的可能性,这可能吗?如果可以,怎么办?
无论如何,如果您在执行涉及第二个数组内容的计算后想到更新第一个数组的更好方法,请发表评论。
【问题讨论】:
-
当您将数组作为函数参数传递时,实际上您传递的是指向第一个元素的指针,因此您可以使用该指针从函数中修改数组。
标签: c arrays function pointers parameters