【发布时间】:2013-07-08 01:56:30
【问题描述】:
我正在尝试制作一个程序,该程序将 10 个数字作为输入并使用 C 中的指针以相反的顺序输出它们。
#include<stdio.h>
#define N 10
int array[N]; //Global variable
int main(void) {
int j;
int i;
printf("Enter 10 numbers: ");
for (i=0;i<N;i++) {
scanf("%d",(array+(4*i))); //Works
}
for (j=N-1;j<0;j--) {
printf("%d",array[j]); //Doesn't print, using *(array+j*4) doesn't
//print also
}
printf("\n");
printf("%d\n",*(array)); //Works so scanf works
printf("%d\n",*(array+4)); //Works so scanf works
return 0;
}
我已经尝试为两个 for 循环创建一个单独的函数,但它仍然不起作用。我想知道为什么这个 for 循环不打印,但它下面的两个 printfs 打印。
编辑:
我的新代码是
#include<stdio.h>
#define N 10
int array[N]; //Global variable
int main(void) {
int j;
int i;
printf("Enter 10 numbers: ");
for (i=0;i<N;i++) {
scanf("%d",(array+i)); //Works
}
for (j=N-1;j<0;j--) { //it is supposed to be j>=0 or j>0 WHY
printf("%d",array[j]); //Doesn't print, using *(array+j) doesn't
//print also
}
printf("\n");
printf("%d\n",*(array)); //Works so scanf works
printf("%d\n",*(array+1)); //Works so scanf works
return 0;
}
感谢所有帖子,我现在对 C 中的索引如何工作有了更好的理解,但 printf 仍然无法工作,除非我更改 for 循环条件(见上文)。为什么它不适用于初始条件但适用于后一种条件。
【问题讨论】:
-
您的概念:与
4相乘是错误的,您只需添加i即可指向下一个位置。(array+(4*i))错了!只需(array+ i)就足够了。当您增加一个指针时,它开始指向其类型的下一个元素,无论大小。 -
the printf doesn't work still因为 for 条件应该是:j >= 0因为数组索引以0开头,您正在从高索引读取数组到低索引(反向) -
谢谢@GrijeshChauhan。我不知道它是如何跳过我的想法的,我会支持你的评论。另外,感谢您的阅读。
标签: c arrays sorting pointers printf