当您在 C 中使用局部变量(动态或静态、数组或非数组)时,您需要将其传递给将要使用它的函数。这就是您的初始代码有什么问题,test()
对data
.
当您声明一个数组(动态或静态)时,您可以以相同的方式将其传递给函数。下面的代码毫无意义,但它说明了使用动态数组与静态数组并没有什么不同。
void assign_function(int arr[], int len_of_arr, int *arr2, int len_of_arr2);
void print_function(int *arr, int len_of_arr, int arr2[], int len_of_arr2);
int main()
{
int data[2] = {0}; // static array of 2 ints
int *data2 = malloc(3 * sizeof(int)); // dynamic array of 3 ints
assign_function(data, 2, data2, 3);
print_function(data2, 3, data, 2);
free(data2); // One difference is you have to free the memory when you're done
return 0;
}
所以我们可以传递数组,无论是动态的还是静态的,通过array[]
或作为指针,但我们也需要传递一个int
,这样我们才能知道数组有多大。
void assign_function(int arr[], int len_of_arr, int *arr2, int len_of_arr2)
{
int count;
for(count = 0; count < len_of_arr; count++) //This is the static array
arr[count] = count;
for(count = 0; count < len_of_arr2; count++) //This is the dynamic array
arr2[count] = count;
}
然后只是为了好玩,我反转了传入的数组arr
和arr2
这里,以及它们是如何访问的:
void print_function(int *arr, int len_of_arr, int arr2[], int len_of_arr2)
{
int count;
for(count = 0; count < len_of_arr; count++) //This is the dynamic array now
printf("arr[%d] = %d\n", count, *(arr+count));
for(count = 0; count < len_of_arr2; count++) //And this is the static array
printf("arr2[%d] = %d\n", count, *(arr2+count));
}
指向,通过[]
或作为指针传递,以及通过[]
或引用指针访问取决于您,两者都很好,都可以工作。我尽量避免使用指针,因为它们往往难以阅读并且在编写时更容易出错。