Chinaunix首页 | 论坛 | 博客
  • 博客访问: 59279
  • 博文数量: 23
  • 博客积分: 270
  • 博客等级: 二等列兵
  • 技术积分: 215
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-31 11:01
文章分类

全部博文(23)

文章存档

2013年(21)

2012年(2)

我的朋友

分类: C/C++

2013-01-02 15:02:47

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