老生常谈,字符串,字符数组,字符串指针,字符数组指针。
先罗索几句常识,直接写的字符串(要加双引号)是常量,在常量区,字符数组是变量,是在堆里还是栈里由程序员决定,无论是字符数组还是其他形式的字符串都要加\n表示结束。
常量字符串加个\n表示结束非常好理解,不以这种结构来存储字符串会使得程序不知道字符串何时结束,但字符
数组也要加个\n表示结束第一时间确实令人难心理解。不得不再次回到编译器的角度来看数组,数组名可以看作
编译过程中的地址,C编译器在编译的过程中并不作过多的检查,他只作数组首地址处理和首地址加下标数得到
的地址处理,所以检测数组是否越界是程序员的责任,甚至有程序员故意写下数组越界的代码。至于C编译器为
何要这么设计不得而知,但是编译器要加个数组越界检测模块是非常容易的事情,但同时也会限制了一些神级C
程序员的发挥。回到字符数组的\n问题,一些和字符串处理有关的函数比如说printf函数是以\n为依据处理数据
的,如果以数组大小为依据来设计会显得有点复杂,无法知道字符串后面那些连接着的零是字符串还是填充,虽
然处理的办法一定有,但浪费空间是肯定的。再加上编译器本身还没有数组越界检查,这使设计上又多了一个任
,所以字符数组也同样也\n表示结束。
至于字符串指针,字符数组指针,好像没什么需要说的,记住了,那个是指针就行。
阅读(642) | 评论(0) | 转发(0) |