Nam*_*ess 4 c arrays sorting printf pointers
我试图制作一个程序,将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;
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试为两个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;
}
Run Code Online (Sandbox Code Playgroud)
感谢所有帖子,我现在更好地理解索引在C中是如何工作的,但是除非我改变for循环条件(参见上文),否则printf仍然无法工作.为什么它不适用于初始条件,但适用于后者条件.
哇!
这个:
scanf("%d",(array+(4*i))); //Works
Run Code Online (Sandbox Code Playgroud)
是非常错误的,正在覆盖记忆!你为什么要乘以索引?你不需要这样做,C可以自己编制索引.它应该只是:
scanf("%d", &array[i]);
Run Code Online (Sandbox Code Playgroud)
你想要i
第一个数组成员的地址,所以说,不要用奇怪的乘法击败灌木丛.
如果您真的想要"使用指针",如评论中所述,您可以这样做:
scanf("%d", array + i);
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为array
它是指向数组的第一个元素的指针,并且添加i
到指针算术是完全有效的使用; C将计算正确的指针,知道int
数组中每个的大小.