为什么这两道题的答案是一个是ASCII码值加2后的结果,一个是直接首地址后面第二个元素的结果?求解!

为什么这两道题的答案是一个是ASCII码值加2后的结果,一个是直接首地址后面第二个元素的结果?求解!

1 个回答

林已

提问:为什么这两道题的答案是一个是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


  • 1 关注
  • 0 收藏, 浏览
  • 提出于

相似问题