以下两道题小白求大神解释

问题描述:

以下两道题小白求大神解释
27. 以下程序的运行结果是().
main()
{int a[]={1,2,3,4,5,6},*p=a;
*(p+3)+=2;
printf("%d",*(p+3));
}

A.2 B. 3 C.5D.6

28. 以下程序的运行结果是().
main()
{chars[]="abcdefg",*p=s+2;
p[3]='\0';
printf("%s\n",p);
}

A.abcB. cdeC. bce D.def
求解答过程

27.输出6
因为p指向a的起始地址,*(p+3)即是a[3](存放着4),
*(p+3)+=2;即是a[3]=a[3]+2;
最后即是输出a[3].
28.输出cde
因为*p=s+2;定义一个字符指针,并初始化为指向s[2](存放着'c'),p[3]='\0'即把s[5](即原存放‘f'的单元)置为‘\0’即字符串尾了.所以最后的输出就从c开始向后直到'\0'前一个字符结束.