C语言指针输出题,求运行结果,解释为什么是该结果:

#include <stdio.h>

char b[] = "program";
char *a = "PROGRAM";

main()
{
int i=0;

printf("%c%s\n", *a, b+1);

while (putchar (*(a+i)))
{
i++;
}

printf("i = %d\n", i);

while ( -- i)
{
putchar (*(b+i));
}

printf("\n%s\n", &b[3]);
}

输出的结果:
Program
PROGRAM i = 7
margor
gram
解释:
char b[] = "program";//字符串常量"program"存入数组b中
char *a = "PROGRAM";//字符指针a指向字符串常量"PROGRAM"的首地址
printf("%c%s\n", *a, b+1);
//首先输出a指向位置的一个字符,再从b+1处开始输出字符串,直到遇到'\0'
//a指向"PROGRAM"的首地址,所以输出的那个字符就是P
//b+1的作用与&b[1]相同,就是数组b的第二个元素的地址,也就是'r'的地址
//所以,接下来输出的就是"rogram"

再来解释第二个输出:
int i = 0;
while (putchar (*(a+i)))//从a指向的地址开始逐个输出字符
{
i++;
}
//由于putchar()返回所输出的字符的ASCII码值,所以当遇到'\0'时
//由于,'\0'的值为0,从而跳出while循环
//因此,输出的就是从a指向的地址开始,到遇见第一个'\0'为止,之间的所
//有字符,i记录了putchar()输出的字符的个数,当输出'm'时,i值为6(下标由0开始),接下来执行i++;i的值为7.然后执行输出'\0',跳出循环,所以i最终
值为7

//第三个输出
while ( -- i)
{
putchar (*(b+i));
}

//由于i的初始值为7,所以这里输出了b[6]到b[1]供6个字符。
//当--i为0时,跳出循环<注意:VC里把0当做false,非0当做true>

最后一个输出:
printf("\n%s\n", &b[3]);
//从数组b的第四个元素所在的位置输出字符串,直到遇见'\0'
//具体过程看看前面几个输出的描述吧

提示:
c中的数组下标是从0开始的,很容易让人搞糊涂
温馨提示:答案为网友推荐,仅供参考
相似回答