在C中传递一个整数数组作为函数参数

时间:2012-03-11 10:23:15

标签: c arrays parameters

请帮助我,我坚持这个。 我有一个函数必须求和两个大小为n的整数数组 我必须作为函数的参数传递每个数组的第一个元素 难道这真的很近吗?

 12 void sumVect(int * v[], int * w[] ,int n)
 13 //adds the second vector to the first vector; the vectors v and w have exactly n components
 14 {
 15         int i;
 16         for(i=0;i<n;i++)
 17         {
 18                 *v[i]+=*w[i];
 19         }
 20 
 21 }

我会给你整个代码

#include <stdio.h>

void sumVect(int * v[], int * w[] ,int n)
//adds the second vector to the first vector; the vectors v and w have exactly n components
{
    int i;
    for(i=0;i<n;i++)
    {
        *v[i]+=*w[i];
    }

}


int main()
{   
    int i,j;
    int n = 4;  //the size of a vector
    int k = 5;  //the number of vectors
    int v[k][n];    //the vector of vectors

    printf("How many vectors? k=");
    scanf("%d",&k);

    printf("How many components for each vector? n=");
    scanf("%d",&n);

    for(i=1;i<=k;i++)   //read the content of each vector from the screen
    {
        printf("\nv%d   |\n_____|\n",i);

        for(j=0;j<n;j++)
        {
            printf("v%d[%d]=",i,j);
            scanf("%d", &v[i][j]);
        }
    }

    for(j=1;j<k;j++)
    {
        sumVect(&v[j], &v[j+1], n);
        for(i=0;i<n;i++)
        {
            printf("%d",v[j][i]);
        }
    }


    return 0;
}

3 个答案:

答案 0 :(得分:4)

请注意,您传递的是int []类型,但函数中的形式参数为int *[]。因此,您的签名应为:

void sumVect(int v[], int w[] ,int n)

void sumVect(int *v, int *w,int n)

您还应该在

这样的功能中访问它们

v[i] + w[i]因为vw都是int *int [](取决于正式的参数)

同样在打电话时你应该这样做:

sumVect(v[j], v[j+1], n);

sumVect(&v[j], &v[j+1], n);

这是因为v[j]的类型为int []&v[i]v[i]会评估到同一地址。

答案 1 :(得分:1)

这是函数sumVect的更正版本。

void sumVect(int * v, int * w ,int n)
//adds the second vector to the first vector; the vectors v and w have exactly n components
{
    int i;
    for(i=0;i<n;i++)
    {
        v[i]+=w[i];
    }

}

但是你需要进行一些修正。 看看这段代码:

int n = 4;  //the size of a vector
int k = 5;  //the number of vectors
int v[k][n];    //the vector of vectors

printf("How many vectors? k=");
scanf("%d",&k);

printf("How many components for each vector? n=");
scanf("%d",&n);

这是大小为5x4的二维数组的分配,然后你的程序会询问用户实际应该是什么大小的数组。 解决它的最简单方法是使用数组的堆分配。这是固定代码:

int n = 4;  //the size of a vector
int k = 5;  //the number of vectors
int **v = NULL;    //the vector of vectors

printf("How many vectors? k=");
scanf("%d",&k);

printf("How many components for each vector? n=");
scanf("%d",&n);
v = malloc(sizeof(int*), k);
for( int i = 0; i < k; ++i)
   v[i] = malloc(sizeof(int), n);

最后你应该以类似的方式释放分配的内存,但让它成为你的功课。

答案 2 :(得分:1)

在c中,数组和指针通常被视为相同的东西。数组变量保存指向数组的指针,[]表示法是指针算术的快捷方式。

请注意,n应为无符号类型。

void sumVect(int * v, int * w, uint n)
{
    while (n--)
    {
        *v++ += *w++;
    }
}