如何在C中将数组作为函数参数传递?

时间:2013-06-02 17:45:56

标签: c arrays arguments

如何在C中传递数组作为参数?

int a,b,c[10];
void Name1(int x, int y, int *z)
{
    a = x;
    b = y;
    c = z;
}

我尝试将其作为参数传递,但它没有构建,如何修复它?

void Name1(int x, int y, int *z);的声明是否与void Name1(int x, int y, int z[])相同?编译器会将void Name1(int x, int y, int z[])视为void Name1(int x, int y, int *z);吗?

4 个答案:

答案 0 :(得分:1)

当您将数组作为参数传递给函数时,它会衰减为指向其第一个元素的指针。

所以,

void Name1(int x, int y, int *z)

会奏效 但是阵列不可分配:

c = z;

不起作用,您需要将每个数组元素从源显式复制到目标。

答案 1 :(得分:0)

执行c = z;,您将分配一个非l值,这是不允许的。这就像做&c[0] = &z[0];

答案 2 :(得分:0)

这里有几个答案,但我认为它们中的任何一个都不够,所以......

基本上你可以复制数组或使用指针,但无论哪种方式,你都需要跟踪长度。

int a,b, *c, len;

void Name1(int x, int y, int *z, int z_len)
{
    a = x;
    b = y;
    c = z;
    len = z_len;
}

//usage: 
int arr[5];

Name1(1,2,arr /* or &arr[0] ,*/, sizeof(arr )/ sizeof (int));

如果你永远不需要添加项目就足够了......如果你这样做会变得更复杂......

保持长度是很重要的,这样你就可以知道你有多少元素,即使你打算复制它们。

答案 3 :(得分:0)

c=z; is invalid

c指针没有内存来保存z地址。

你可以说:

int a,b,*c;    
c=(int *)calloc(10,sizeof(int) );
void Name1(int x, int y, int *z)
{
  a = x;
  b = y;
  c = z;
}