从阵列打印时,元素值显示不正确

时间:2016-06-08 05:21:10

标签: c arrays

我只是在学习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;
}

2 个答案:

答案 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 ??。并且你想返回一个数组,但你要返回一个字符(它会给出错误)..不要惊慌或不高兴..只需要通过你的书或学习资源..制作流程图和伪代码以获得逻辑工作..希望如下帮助