【题解】题9.7《未知》
题面
设char * s = "\ta\017bc"; 则指针变量s指向的字符串所占的字节数是____?
A) 9
B) 5
C) 6
D)7
分析
此题考察C语言字符串相关知识,关于答案最简单最准确的方法是用sizeof函数计算一下题面中字符串即可得出答案 6 。
但是这样只是搞出来了答案,我们还得知其所以然。
首先,我们先复习一下C语言的char类型的知识,在C语言中char类型即字符型,占一字节大小,那么对应到本题中我们搞清楚"\ta\017bc"这个字符串由几个char组成就能搞明白了。
如果你了解转义字符是什么,并且清除C语言的字符串存储规则,那么不难和做出一样的断句,并数出题面答案的6。
如果不清楚,没关系,我们挨个讲。
C语言中不存在真正意义上的字符串,C语言中存储字符串是通过char类型数组或者用char指针来实现,本题就是使用指针方式来声明的字符串。指针并不是本题的重点,重要的是字符串的存储机制,不了解这点的同学可能会发现我数数的时候多数了一个题中字符串没有的 \0 ,这玩意其实存在于每一个字符串末尾,每当用户创建一个字符串时,就会自动往其末尾添加一个这个字符,这样C语言在读取字符串时识别到它就知道到达了字符串末尾,从而结束读取。
注意 \0 是一个char类型字符,尽管它由两个符号构成,它属于一种特殊的字符-转义字符。我们所熟知的 \t \n 缩进、换行,都是这类字符,转义字符往往表达是特殊的符号,比如换行。需要注意的是不是所有转义字符都是有具体含义的,比如题目中的 \017,(按照8进制算) 他转义完的结果是15,然而ASCII码表中并没有与之对应的符号。如果你企图输出它,你大概率会得到空白或者一个特殊符号(例如方框)。在整个字符串中的有 \ 字符时你就需要注意它是不是转义字符了,转义字符被视作一个char类型字符。
题解
综上所述,了解char类型的存储空间、C语言字符串末尾补 \0 和转义字符这几个知识点,就不难数出6个字符,算出占6个字节。
C
题目来源
C语言考研交流群群友询问