user-0 提问: 把0~9个数字赋予数组a，并逆序输出，用指针设计程序，输出结果相同，但是哪个程序是正确的。

回复:
user: user-0
content: 引用 2 楼 cfjtaishan 的回复:#include <stdio.h>  int main () {     int i,a[10];     int *p;     p = a;     for(i=0;i<=9;i++,p++) {         *p = i;         printf("%3d",*p);     }     printf("\n");     for(i=9; i>=0; i--)          printf("%3d",*(p-i-1));      return 0; } 程序1，输入时，注意代码冗余的问题。  #include <stdio.h>  int main () {     int i,a[10];     int *p;     p = a;      i = 0;     while (i <= 9)         *p++ = i++;      for(i = 9; i >= 0; i--)         printf("%3d", *(p - i - 1));      printf("\n");      return 0; }   嗯，我就是没搞清楚printf中*（p-i-1）的意思

user: user-0
content: 引用 1 楼 fight_in_dl 的回复:代码走查没发出什么问题，不放心上机测试，也都通过。 不知道您说的"正确"有什么特定约束？   嗯，我上机测试过，代码没报错，输出也正确，但除了程序2是反复改后直接写出来的，程序1是在测试后，根据输出将代码中第二个printf中改成*（p-1）的，并不能理解是为什么，程序3是根据网上的介绍写的  还有就是这个问题？

user: user-1
content: #include <stdio.h>  int main () {     int i,a[10];     int *p;     p = a;     for(i=0;i<=9;i++,p++) {         *p = i;         printf("%3d",*p);     }     printf("\n");     for(i=9; i>=0; i--)          printf("%3d",*(p-i-1));      return 0; } 程序1，输入时，注意代码冗余的问题。  #include <stdio.h>  int main () {     int i,a[10];     int *p;     p = a;      i = 0;     while (i <= 9)         *p++ = i++;      for(i = 9; i >= 0; i--)         printf("%3d", *(p - i - 1));      printf("\n");      return 0; }

user: user-2
content: 代码走查没发出什么问题，不放心上机测试，也都通过。 不知道您说的"正确"有什么特定约束？

user: user-1
content: 引用 6 楼 baidu_39384527 的回复:[quote=引用 5 楼 cfjtaishan 的回复:] [quote=引用 4 楼 baidu_39384527 的回复:] [quote=引用 2 楼 cfjtaishan 的回复:] #include <stdio.h>  int main () {     int i,a[10];     int *p;     p = a;     for(i=0;i<=9;i++,p++) {         *p = i;         printf("%3d",*p);     }     printf("\n");     for(i=9; i>=0; i--)          printf("%3d",*(p-i-1));      return 0; } 程序1，输入时，注意代码冗余的问题。  #include <stdio.h>  int main () {     int i,a[10];     int *p;     p = a;      i = 0;     while (i <= 9)         *p++ = i++;      for(i = 9; i >= 0; i--)         printf("%3d", *(p - i - 1));      printf("\n");      return 0; }   嗯，我就是没搞清楚printf中*（p-i-1）的意思[/quote] p指向数组a，那么，p可以当作数组来使用。*(p-i-1)等价于p偏移（向前）(i + 1) * sizeof(int)个字节。[/quote]   嗯，在了解了for循环中p初始值后就能理解了，是while循环结束时的p+10即a+10是吧？[/quote] 可以这么理解～

user: user-0
content: 引用 5 楼 cfjtaishan 的回复:[quote=引用 4 楼 baidu_39384527 的回复:] [quote=引用 2 楼 cfjtaishan 的回复:] #include <stdio.h>  int main () {     int i,a[10];     int *p;     p = a;     for(i=0;i<=9;i++,p++) {         *p = i;         printf("%3d",*p);     }     printf("\n");     for(i=9; i>=0; i--)          printf("%3d",*(p-i-1));      return 0; } 程序1，输入时，注意代码冗余的问题。  #include <stdio.h>  int main () {     int i,a[10];     int *p;     p = a;      i = 0;     while (i <= 9)         *p++ = i++;      for(i = 9; i >= 0; i--)         printf("%3d", *(p - i - 1));      printf("\n");      return 0; }   嗯，我就是没搞清楚printf中*（p-i-1）的意思[/quote] p指向数组a，那么，p可以当作数组来使用。*(p-i-1)等价于p偏移（向前）(i + 1) * sizeof(int)个字节。[/quote]   嗯，在了解了for循环中p初始值后就能理解了，是while循环结束时的p+10即a+10是吧？

user: user-1
content: 引用 4 楼 baidu_39384527 的回复:[quote=引用 2 楼 cfjtaishan 的回复:] #include <stdio.h>  int main () {     int i,a[10];     int *p;     p = a;     for(i=0;i<=9;i++,p++) {         *p = i;         printf("%3d",*p);     }     printf("\n");     for(i=9; i>=0; i--)          printf("%3d",*(p-i-1));      return 0; } 程序1，输入时，注意代码冗余的问题。  #include <stdio.h>  int main () {     int i,a[10];     int *p;     p = a;      i = 0;     while (i <= 9)         *p++ = i++;      for(i = 9; i >= 0; i--)         printf("%3d", *(p - i - 1));      printf("\n");      return 0; }   嗯，我就是没搞清楚printf中*（p-i-1）的意思[/quote] p指向数组a，那么，p可以当作数组来使用。*(p-i-1)等价于p偏移（向前）(i + 1) * sizeof(int)个字节。