首页 > 试题广场 >

设有语句 char a = '\72'; 则关于变量a的说

[单选题]
设有语句  char a = '\72';,则关于变量a的说法正确的是()
  • 包含2个字符
  • 说明不合法
  • 包含1个字符
  • 包含3个字符
八进制转义字符, 72前面加不加 0 都可以.
编辑于 2019-04-08 21:49:05 回复(0)
更多回答
所有转义字符都算作一个字符,如下表特殊的\ooo三位八进制和\xff表示16进制(x是符号不算在内)
\a
响铃(BEL)

\b
退格(BS) ,将当前位置移到前一列

\f
换页(FF),将当前位置移到下页开头

\n
换行(LF) ,将当前位置移到下一行开头

\r
回车(CR) ,将当前位置移到本行开头

\t
水平制表(HT) (跳到下一个TAB位置)

\v
垂直制表(VT)

\\
代表一个反斜线字符''\'

\'
代表一个单引号(撇号)字符

\"
代表一个双引号字符

\? 代表一个问号
\0
空字符(NULL)

\ooo
1到3位八进制数所代表的任意字符

\xff
1到2位十六进制所代表的任意字符


发表于 2017-09-08 20:15:27 回复(0)
\为转义字符,\72转义为一个八进制数72,也就是十进制数的58
赋值给a,a就是一个ascii码为58的字符。
发表于 2018-03-06 11:12:49 回复(0)
发表于 2017-09-07 16:28:00 回复(0)
之所以不写\072是因为计算机读到\0识别为字符串结束标志,就不会继续往下读取了
发表于 2021-12-04 21:26:36 回复(0)
记录一下,从本题所联想到的其他知识点(易于混淆的):
1.若本题改为char a = "\72", 问prinf("%c\n", a)的输出结果将是什么? (提示:涉及字符字面量与字符串字面量,类型转换与截断的问题)
#include <stdio.h>
int main()
{
    char a = "\72";
    printf("0x%p, %c, %d\n", "\72","\72", a);
    printf("%d\n",'d');
    
    return 0;
}
//程序结果:0x00403064, d, 100
//100
分析:
1)编译后字符串"\72"的内存地址被赋值给变量a;
2)内存地址占用4个字节(笔者用的是32位编译环境),而变量a只占用一个字节;
3)由于两者类型的不同,赋值的过程将会产生截断,即从十六进制结果0x00403064中截取一个字节的数据(十六进制64,转换成十进制为100)

2.char* p = "123"; 编译器执行到这条语句时,做了哪几件事情?
1)将字符串"123"放入全局只读存储区(.rodata段)
2)在字符串尾部加上'\0'
3)返回字符串字面量的地址值给指针p

3. 注意下面的程序片段:
//这里打印%s和%c时使用的都是指针值
char* p = "123";
char* q = 'a'; 
printf("%s %c\n" ,p,q); 

编辑于 2021-03-11 12:55:19 回复(0)
单引号不就是一个字符吗,又不是字符串
发表于 2022-10-31 15:05:36 回复(0)
理解不了,不加‘0’或者‘x’,怎么区分是八进制还是16进制
发表于 2020-08-06 11:13:06 回复(1)
\72=\072,坑啊,我怎么知道这是八进制数呢?哎,十进制为58的字符为:
以后看到这个就谨记是八进制   
发表于 2019-04-09 17:09:43 回复(1)
变量a的值为'\72','\72'是八进制表示的字符,对应的ASCII码为50,是字符'2'的ASCII码值。所以变量a的值为字符'2'。
发表于 2023-08-03 20:39:40 回复(0)
我以为单引号只有一个字符 哈哈哈
发表于 2018-07-23 20:07:18 回复(1)
/72指的是八进制

发表于 2023-07-21 14:42:09 回复(0)
发表于 2021-09-24 14:52:21 回复(0)
\72代表8进制 char 肯定存一个字符
发表于 2021-04-02 10:15:29 回复(0)
发表于 2020-05-09 14:40:52 回复(0)
a
发表于 2017-12-18 20:32:11 回复(0)
选C么?
发表于 2017-12-10 07:56:37 回复(0)