使用指针,数组不会在C中反向打印

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仍然无法工作.为什么它不适用于初始条件,但适用于后者条件.

unw*_*ind 8

哇!

这个:

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数组中每个的大小.

  • 如果赋值是关于指针的,那么可能是`array + i`. (6认同)