字符串在C语言中实际是字符数组,因为C比其他大多数语言更底层,他并没有提供字符串这个数据类型,而是采用相似的东西代替,这就是以字符为元素的数组。char *s="PPYY";上面这个字符串(我们也把它称为字符串字面值),C会把它作为数组进行操作,char s[]={"P","P","Y","Y"};所以采用s[0],s[1]访问这个字符串是被允许的,但是需要非常清醒的是,字符串字面值是不能被修改的,因为字符串字面值和字符数组在内存当中的工作方式是不一致的。
将C语言梳理一下,分布在以下10个章节中:- Linux-C成长之路(一):Linux下C编程概要 http://www.linuxidc.com/Linux/2014-05/101242.htm
- Linux-C成长之路(二):基本数据类型 http://www.linuxidc.com/Linux/2014-05/101242p2.htm
- Linux-C成长之路(三):基本IO函数操作 http://www.linuxidc.com/Linux/2014-05/101242p3.htm
- Linux-C成长之路(四):运算符 http://www.linuxidc.com/Linux/2014-05/101242p4.htm
- Linux-C成长之路(五):控制流 http://www.linuxidc.com/Linux/2014-05/101242p5.htm
- Linux-C成长之路(六):函数要义 http://www.linuxidc.com/Linux/2014-05/101242p6.htm
- Linux-C成长之路(七):数组与指针 http://www.linuxidc.com/Linux/2014-05/101242p7.htm
- Linux-C成长之路(八):存储类,动态内存 http://www.linuxidc.com/Linux/2014-05/101242p8.htm
- Linux-C成长之路(九):复合数据类型 http://www.linuxidc.com/Linux/2014-05/101242p9.htm
- Linux-C成长之路(十):其他高级议题
C++ Primer Plus 第6版 中文版 清晰有书签PDF+源代码 http://www.linuxidc.com/Linux/2014-05/101227.htm我们以Linux系统为例,粗略说说为什么他们的工作方式不一致,下图是简略的内存结构图:
| 局部变量区域 | 栈 |
| 无序组合 | 堆 |
| | 全局区 |
| 只读存储区 | 常量区 |
| | 代码区 |
/*字符串字面值的工作工作方式*/1、字符串字面值 "PPYY"先是存放在常量区,存放的样子如下: