吾爱程序员:这里有好玩的游戏和软件
当前位置:首页C语言教程 → 如何在 C 中按值传递数组

如何在 C 中按值传递数组

来源:网络 | 更新时间:2022-01-13 20:19:35
在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 modificationn");
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 modificationn");
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("nnIn '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
 

最新文章

热点资讯

手游排行榜

CopyRight 2020-2030吾爱程序员

鄂ICP备2021004581号-8

本站资源收集于网络,如有侵权请联系我们:35492删除0109@qq.com