字符串与字符数组的区别
来源:互联网 发布:成都专业seo营销公司 编辑:程序博客网 时间:2024/05/23 17:01
首先需要先了解\0
的概念。
\0
的概念
\0
是c语言中的字符串结束符,在ASCII字符集中对应空字符NULL,它虽然不计入串长,==但要占内存空间!==
可见\0
是作为字符串结尾的一个标识符,也即当编译器碰到\0
时才会认为到达了这个字符串的结尾,==如果一直没碰到\0
,编译器就一直找一直找,直到找到一个\0
为止!==
字符串的概念
首先从内存角度上来看,字符串就是一段连续的内存,但该段内存中的内容符合如下两个特点:
- 该段内存中的最后一个字节必然为
\0
- 该段内存中除了最后一个字节为
\0
,其余字节均不为\0
,也即有且仅有一个\0
所以给这样一段符合上述两个特点的内存取了一个名字,叫“字符串”,同时该段内存中的内容一般都是可见字符,也即可打印字符,所以便可用%s
进行打印,所打印出的内容为该段内存除最后一个字节\0
的所有内容,也即\0
之前的所有内容。
字符数组的概念
首先数组也即是一段连续的内存,字符数组显然也是一段连续的内存,但该段内存中的内容符合如下一个特点:
- 该段内存中的内容都为字符
所以给这样一段符合上述特点的内存取了一个名字,叫“字符数组”,意思这个数组中的元素都是字符,同样的若元素都是数字,则相应的叫做“数字数组”。
字符串与字符数组的区别
由上可见,只要是符合相应的要求内存便可相应的叫做“字符串”或“字符数组”。
也即只要内存中的内容都为字符便可称作“字符数组”,而\0
显然也是能算作是字符,==所以字符串也能算是一种特殊的字符数组==,但字符串与字符数组的概念经常容易混淆也是因为这个原因。
由上可见,字符串中有且仅有一个\0
,且该\0
必然是内存中的最后一个字节,而在字符数组中也可以存在\0
,最关键的为\0
的个数可以为0个、1个、2个……,\0
的位置可以为第一位、第二位、第三位……
这样当字符数组中正巧只存在一个\0
,且正巧又处于该段内存中的最后一个字节位置,该字符数组就又可以叫做字符串了,且只有上面这种情况时字符数组就才能叫做字符串,其余情况下字符数组就只能叫做字符数组。
==也即一段连续的内存,如果该段内存中的内容有且仅有一个\0
,且该\0
是该段内存中的最后一个字节,该段内存就叫做“字符串”,否则就叫做“字符数组”,同时即使是叫做“字符串”,也可称为是“特殊的字符数组”。==
注:
- 特别需要注意的是,如果字符数组中不存在
\0
时,用%s
打印该数组,编译器便会因为找不到\0
而一直找一直找,最后超出了数组的范围,造成内存泄漏 - 同时若字符串中的字符个数为n,那该字符串的长度至少为 n+1,因为需要多一位来存储“
\0
”。
- 字符串数组与字符数组的区别
- 字符串指针与字符数组的区别
- 字符串指针与字符数组的区别
- 字符串指针与字符数组的区别
- 字符串指针与字符数组的区别
- 字符串指针与字符数组的区别
- 字符串指针与字符数组的区别
- 字符串指针与字符数组的区别
- 字符串指针与字符数组的区别
- 字符串指针与字符数组的区别
- 字符串指针与字符数组的区别
- 字符串指针与字符数组的区别
- 字符串指针与字符数组的区别
- 字符串指针与字符数组的区别
- 字符串指针与字符数组的区别
- 字符串指针与字符数组的区别
- 字符串指针与字符数组的区别
- 字符串指针与字符数组的区别
- 【HDU 1002 A + B Problem II】+ JAVA
- 【十五】奇异值分解
- css 初步入门
- 当想放弃的时候告诉自己!!!
- MYSQL基础语法
- 字符串与字符数组的区别
- storm集群基础+部署
- LeetCode - Binary Tree Level Order Traversal
- GoKit三种配置方式
- 微信应用号(小程序)公测后估计多久正式开放?
- MYSQL进阶
- 在HTML中引入JavaScript
- 数据库的相关函数
- 蓄水池抽样基于MapReduce的实现