我试图理解指针和函数,特别是在从函数返回数组时如何使用指针。我试着写一些代码,看看我是否理解它,但我显然没有。请你看看,告诉我我做错了什么?谢谢。
#include <stdio.h>
int *elmntsum(int *a, int *b);
int main()
{
int *z;
int x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int y = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20} ;
z = elmntsum(x, y);
int t;
for (t = 0 ; t < 10 ;t++){
printf( "%d\n", z[t]);
}
return(0);
}
int *elmntsum(int *a, int *b){
static int *c;
int t;
for (t = 0 ; t < 10 ;t++){
c[t] = a[t] + b[t];
}
return(c);
}
答案 0 :(得分:0)
您的代码存在许多问题,最重要的一点是您没有为c
分配空间。
如果你真的不知道为什么它有用,请不要使用static
,在这种情况下肯定没用。
另一个重要问题是x
和y
的声明,它们应该被声明为数组,即
int x[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int y[10] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20} ;
你可以这样做
int *elmntsum(int *a, int *b, size_t count) {
int *c;
c = malloc(count * sizeof(*c));
if (c == NULL)
return NULL;
for (size_t t = 0 ; t < count ;t++)
c[t] = a[t] + b[t];
return c;
}
然后你的main()
看起来像这样
int main()
{
int *z;
int x[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int y[10] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20} ;
z = elmntsum(x, y, 10);
if (z == NULL)
return -1;
for (size_t t = 0 ; t < 10 ;t++){
printf("%d\n", z[t]);
}
free(z);
return 0;
}