请帮助我,我坚持这个。 我有一个函数必须求和两个大小为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;
}
答案 0 :(得分:4)
请注意,您传递的是int []
类型,但函数中的形式参数为int *[]
。因此,您的签名应为:
void sumVect(int v[], int w[] ,int n)
或
void sumVect(int *v, int *w,int n)
您还应该在
这样的功能中访问它们 v[i] + w[i]
因为v
和w
都是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++;
}
}