整数值如何使用scanf()传递给指针?

时间:2018-04-19 11:47:14

标签: c arrays pointers

此行如何在下面的代码中使用scanf("%d",ptr++);?指针的值扫描存储为指针所指向的地址或存储?当我printf("%d", *ptr);时,只出现了垃圾。我真的想知道输入数据的存储位置。提前谢谢。

int main()
{
    int index, max, numArray[10];
    int *ptr=0;
    ptr = numArray;

    printf("Enter 10 numbers: \n");
    for(index=0;index<10;index++)
    {
        scanf("%d",ptr++);
    }

    ptr=numArray;
    max=*ptr;
    for(index=0;index<10;index++)
    {
        if(*ptr>max)
            max=*ptr;
        ptr++;
    }

    printf("max is %d.\n", max);

    return 0;
}

1 个答案:

答案 0 :(得分:3)

  

指针存储的值扫描为指针所指向的地址或存储?

后者。您将{{1>} 位置(也就是指针)指向应存储其结果的变量。

  

当我scanf()时,只出现了垃圾

在您的计划中,printf("%d", *ptr);会不断修改,以使其指向ptr的各个元素。 numArray将指针前进一,但计算结果为原始值。因此,如果您在ptr++之后直接放置此printfscanf就可以索引4,但由于scanf()++将打印索引5.这尚未初始化,因此可能包含一些随机数据。就C而言,使用未初始化的值只是未定义的行为

在这个地方工作的是printf之类的东西,但这是编写整个事情的一种非常奇怪的方式。也许将第一个循环重写为类似

的东西
printf("%d", *(ptr-1));

所以递增指针只会在您<{1}}中使用 之后发生。