此行如何在下面的代码中使用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;
}
答案 0 :(得分:3)
指针存储的值扫描为指针所指向的地址或存储?
后者。您将{{1>} 位置(也就是指针)指向应存储其结果的变量。
当我
scanf()
时,只出现了垃圾
在您的计划中,printf("%d", *ptr);
会不断修改,以使其指向ptr
的各个元素。 numArray
将指针前进一,但计算结果为原始值。因此,如果您在ptr++
之后直接放置此printf
,scanf
就可以索引4,但由于scanf()
,++
将打印索引5.这尚未初始化,因此可能包含一些随机数据。就C而言,使用未初始化的值只是未定义的行为。
在这个地方工作的是printf
之类的东西,但这是编写整个事情的一种非常奇怪的方式。也许将第一个循环重写为类似
printf("%d", *(ptr-1));
所以递增指针只会在您<{1}}中使用 之后发生。