在C语言中,数组名称代表地址,当我们传递数组时,我们实际上传递地址,并且参数接收函数始终接受它们作为指针(即使我们使用[],也请参考此内容)。
如何通过值传递数组,即,当我们将其传递给函数时,如何确保我们拥有新的数组副本?
这可以通过将数组包装在结构中并创建该结构类型的变量并将值分配给该数组来完成。之后,将变量传递给其他函数,然后根据需要对其进行修改。请注意,将数组成员作为参数传递时将对其进行复制,但不会复制动态数组。因此,此解决方案仅适用于非动态数组(创建时不使用new或malloc)。
让我们看一个示例,以使用C程序演示上述事实:
// C program to demonstrate passing an array
// by value using structures.
#include
#include
# define SIZE 5
// A wrapper for array to make sure that array
// is passed by value.
struct ArrayWrapper
{
int arr[SIZE];
};
// An array is passed by value wrapped in temp
void modify(struct ArrayWrapper temp)
{
int *ptr = temp.arr;
int i;
// Display array contents
printf("In 'modify()', before modification\n");
for (i = 0; i < SIZE; ++i)
printf("%d ", ptr[i]);
printf("\n");
// Modify the array
for (i = 0; i < SIZE; ++i)
ptr[i] = 100; // OR *(ptr + i)
printf("\nIn 'modify()', after modification\n");
for (i = 0; i < SIZE; ++i)
printf("%d ", ptr[i]); // OR *(ptr + i)
}
// Driver code
int main()
{
int i;
struct ArrayWrapper obj;
for (i=0; i
输出:
In 'modify()', before modification
10 10 10 10 10
In 'modify()', after modification
100 100 100 100 100
In 'Main', after calling modify()
10 10 10 10 10
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。