关于C语言中数组、指针、“++”的,题目程序如下,说出执行结果,并解释。(我编译时总是出错)

#include<stdio.h>
#include<string.h>
int main()
{
char a[]="123456",*pc;
int n=0;
while(*a++)
n++;
pc=&a[n-1];
while(--pc>a)
putchar(*pc);
return 0;
}

#include<stdio.h>
#include<string.h>
int main()
{
 char a[]="123456",*pc;
 int n=0;
 while(a[n]!='\0')//'\0'表示字符串的结束标志 a是字符串的首地址是常量不能做自加自减运算的
  n++;
 pc=&a[n];//这样才是取得最后一个字符的地址  因为这样定义char a[]="123456"的字符串其最后一个字符是结束字符其地址为&a[n+1]
 while(--pc>=a)//可以等于  a是字符串的第一个字符的地址
  putchar(*pc);
 return 0;
}

下图是输出结果!

如果没有疑问了的话就麻烦选为满意答案!如果还有疑问的话就继续追问!

追问

这是考研卷上的一道题,程序是现成的,就是上面的程序,让写出执行结果,但我在电脑上运行了一下,显示编译出错,我又把while(*a++)改为while((*a)++),编译无错,但运行结果是乱码。
我想问
1. 执行结果是 765432 吗?如果不是,结果应该是什么?
2. while(*a++) n++;的执行过程是什么?特别是(*a++),a的变化过程是怎样的

追答#include<stdio.h>
#include<string.h>
int main()
{
 char a[]="123456",*pc;
 int n=0;
 while((*a)++)//写成这样的话就等同与a[0]++  那么结束循环的条件呢?
  n++;
 printf("%d\n",n);//加个输出n的语句  输出n是207 
 pc=&a[n-1];//那么这里是pc=&a[206]  没有a[206]  下面你应该知道为什么会输出乱码了吧
 while(--pc>a)
  putchar(*pc);
 return 0;
}

 //如果没有疑问的话就麻烦选为满意答案!还有疑问的话就追问!

我想正确的输出结果是我上面给出的程序!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-24
你是要逆序输出么?可以这样
pc=a;
while(*pc++!='\0')
n++;
输出:5432

少用这种用法
pc=&a[n-1];
while(--pc>a)//跟数组地址比较大小
putchar(*pc);
return 0;追问

这是考研卷上的一道题,程序是现成的,就是上面的程序,让写出执行结果,但我在电脑上运行了一下,显示编译出错,我又把while(*a++)改为while((*a)++),编译无错,但运行结果是乱码。
我想问
1. 执行结果是 765432 吗?
2. while(*a++) n++;的执行过程是什么?特别是(*a++),a的变化过程是怎样的

谢谢耐心回答!

追答

65432
首先(*a++),如果a是数组,就编不过

如果这样(*pc++);是先算pc++,然后算*pc..

第2个回答  2013-10-24
while(*a++)//数组名不能直接自增

相似回答