提问:为什么这两道题的答案是一个是ASCII码值加2后的结果,一个是直接首地址后面第二个元素的结果?求解!
网友回答:
(1) 第一个程序中,第一次执行while循环中的 printf("#%c", *p + password);相当于printf("#%c",'w'+2);因为字符在计算机中是按其ascii码值存储的, 实际是个整数。'w'的ascii码值为119,而password=2,相加后为121(为'y'的sscii码值),%c要求按字符格式输出,所以输出:y。依次类推,以后的每次循环中都是输出*p指向的字符的下2个字符。即选择A. #y#k#p#f。
你可执行第1个程序:
#include <stdio.h>
main( )
{
int password;
char *p,old_str[10]="wind";
scanf("%d",&password);
p=old_str;
while(*p)
{
printf("#%c", *p+password);
p++;
}
printf("\n");
return 0;
}
程序的运行结果正是:
(2)第二个程序中,也是一样道理,printf("%c\n", *s+2);中s是指向数组首字符的地址,而*s就是s指向地址中的内容,即字符'r', *s+2就是'r'+2,根据上面所说,按%c要求输出的结果就是字符'r'下2个字符,即字符't'。
你可执行第2个程序:
#include<stdio.h>
int main( )
{
char s[]="rstuv";
printf("%c\n", *s+2);
return 0;
}
程序的运行结果正是:
t