C语言 如何将数组传递给函数而不在函数外部更改它?(数组无全局)



下面是一个例子:

#include <stdio.h>
#include <stdlib.h>
fun(int porra[])
{  
   porra[0]=-1;
}

int main()
{
  int vec[1];
  vec[0]=0;
  fun(vec);
  printf("%d",vec[0]);
  system("PAUSE");  
  return 0;
}

它应该打印 -1 而不是 0 吗?如果是这样,有没有办法在不运行数组 for 的情况下将数组复制到函数中?

C 中没有按值传递数组的本机方法,因为它们在作为参数传递时"衰减"到指向其第一个元素的指针。

但是有一个技巧:声明一个包含数组的结构。结构是按值传递的,包括数组,如果你想到它,这很奇怪(当我学习 C 时不起作用,因为结构不能是函数参数)。毕竟,结构很像数组,只是元素具有不同的类型。

(示例代码,请参阅上面的alk的答案,他更快。

如何将数组传递给函数而不在函数外部更改它?

您可能希望将数组包装在struct中,并按值传递此struct的实例。

例如,这可能看起来像这样:

#include <stdio.h>

struct array_wrapper
{
  int vec[1];
}
fun(struct array_wrapper aw)
{  
  aw.vec[0] = -1;
  printf("copy of array's 1st element inside fun(): %dn", aw.vec[0]);
}
int main(void)
{
  struct array_wrapper aw;
  aw.vec[0] = 0;
  printf("original array's 1st element prior to calling fun(): %dn",
    aw.vec[0]);
  fun(aw);
  printf("original array's 1st element after having returned from fun(): %dn", 
    aw.vec[0]);
  ...

此行为是正确的:函数参数是允许访问它指向的数组的值。如果你想让原始数组保持不变,你必须在该函数中创建一个它的"深层副本"(即复制每个元素),或者确保你得到原始数组的副本,如其他帖子中所建议的那样。

最新更新