1. 主页
  2. 文档
  3. C语言教程
  4. C语言数组和字符串
  5. 如何在 C 中按值传递数组

如何在 C 中按值传递数组

在C语言中,数组名表示地址,当我们传递一个数组时,我们实际上传递的是地址,而参数接收函数总是将它们作为指针接受

如何按值传递数组,即,当我们将数组传递给函数时,如何确保我们有一个新的数组副本?
这可以通过将数组包装在结构中并创建该结构类型的变量并将值分配给该数组来完成。之后,将变量传递给其他函数并根据要求对其进行修改。请注意,数组成员在作为参数传递时会被复制,但动态数组不是。因此,此解决方案仅适用于非动态数组(在没有 new 或 malloc 的情况下创建)。

让我们看一个使用 C 程序演示上述事实的示例:

// C program to demonstrate passing an array
// by value using structures.
#include<stdio.h>
#include<stdlib.h>

# 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<SIZE; i++)
obj.arr[i] = 10;

modify(obj);

// Display array contents
printf("\n\nIn 'Main', after calling modify() \n");
for (i = 0; i < SIZE; ++i)
printf("%d ", obj.arr[i]); // Not changed

printf("\n");

return 0;
}

输出:

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

 

这篇文章对您有用吗?