比如\017中0后面跟着17 都是属于八进制的数,所以就是相当于ascii码是15(也就是八进制的017)的字符,所以长度就是1了
另外\018就不同了,先遇到1,然后继续发现下一个就是8 不属于八进制的东西,八进制的“解析”就结束了 所以相当于ascii码的1和数字8两个字符组成的子串,所以长度就是2
纯手打 打字不易 谢谢采纳
A不正确。应该是取决于声明而不是定义的位置。声明引入一个名称,定义引入一个实体,作用域和名称相关,生存期和对象(对象属于一种实体,其它实体还有类型等)相关。C明显不正确。理由同上,static修饰局部变量为静态存储类,在首次进入函数时初始化一次,之后进入函数时不初始化而保留在上一次离开函数的值。此外,tssuperszy 的说法不确切,应该是在作用域外“不可见”而不是“不可访问”(特别地,在C++中两者有严格区别)。
D也是不正确的。理由如C选项的解释,使用static修饰局部变量不是为了限制其它编译单元的引用,而是为了在函数多次调用之间保存值。
====
[原创回答团]
不是的。C++中转义字符有三种表示方法:
1 在\后面接一个特定的字母,如\n,\t等。表示对应的意义。
2 在\后面接x,然后接两位16进制数字,不区分大小写。如'\x12', '\xAb'等。表示对应两位16进制的ascii码值。
3 在\后面接三位8进制数值,如'\123', '\011'等。表示三位8进制数表示的ascii码值。
与'\018'最为接近的情况是第三种,不过第三种要求是8进制数,所以合法的字符只有0~7,8并不是合法的8进制字符。所以作为单个字符\018的写法是错误的。如果出现在字符串中,会被当做'\01'(ascii码值为1)和'8'两个字符来处理。