我只是在学习C并让我的程序打印出错误的值,但我不知道如何修复它因此我想得到你的帮助。 这是代码。测试函数在数组中存储整数(从0到20)并返回它。该数组被复制到main函数中的一个新数组(p [20]),我尝试使用for循环打印该数组的每个元素但是该值不正确,例如i = 0然后p [0]应该是0,但它显示-443987883,....
#include <stdio.h>
int test();
int main ()
{
int p[20];
strcpy(p , test);
int i;
int N = 20;
for (i=0; i < N; i++) {
printf ("%i,%i\n", i , p[i]);
}
}
int test (int i , char o[])
{
int N = 20;
for (i = 0; i < N; i++) {
o[i] = i;
}
return o;
}
答案 0 :(得分:0)
您的代码包含很多错误。我将指出它们并向您解释如何解决它。
首先,你绝对应该忘记这句话:
strcpy(p , test);
因此您尝试将功能复制到数组!如果您认为此语句调用test
函数并将p
作为参数传递给此,则不是这样。
如果您想要除main
以外的其他函数来填充数组,最好的方法是动态地将指针指向int
并通过引用传递< / strong>到功能。您可以阅读有关按引用传递或按值here传递的更多信息。
让我们看看你如何做到这一点。首先,将N
定义为程序之外的常量值:
#define N 20
然后,您的main
函数应该像这样修改:
int main ()
{
int *p;
int i;
//Dynamically allocate a pointer to ints
p = malloc(N*sizeof(int));
if (p == NULL)
printf ("Error in allocating memory\n");
//Now call your function
p = test(&p); //pass the pointer by reference
for (i = 0; i < N; i++)
printf ("%d, %d\n", i , p[i]);
}
最后你的test
函数应该像这样修改:
int* test (int** p)
{
for (i = 0; i < N; i++)
*p[i] = i;
return *p;
}
所以test
函数的原型应该改为:
int test();
到:
int* test(int**);
答案 1 :(得分:0)
您编码的内容不符合逻辑,甚至无法工作。您的程序有很多错误strcpy()用于将字符串复制到变量,但您使用的是char数组并返回int ??。并且你想返回一个数组,但你要返回一个字符(它会给出错误)..不要惊慌或不高兴..只需要通过你的书或学习资源..制作流程图和伪代码以获得逻辑工作..希望如下帮助