C++基础--字符数组与字符指针与string的关系
C++基础--字符数组与字符指针与string的关系
1. char []
是数组
这里谈到数组,必然需要知道与指针的关系。
基本常识:数组名本身就是一个指针,指向数组起始元素。
编译器在处理形如 a[i]
的表达式时,将这个表达式转换成 *(a + i)
的形式,然后计算表达式的指向地址。(这也是 C/C++ 下标从 0 开始的原因,表示与头地址的偏移量。)
表达式转换如图所示:
由此,可以解释:
-
使用
scanf("%s", str)
语句,只有字符串不用加取地址符,因为str
本身代表str[]
的地址; -
使用
sort(a + 1, a + n + 1)
语句,a + 1
和a[1]
编译后是相同的,同为a[1]
的地址。
2. char *
与 char []
的区别
char *
本质上是指针;char []
本质上是数组。
特殊的:
char *a = "abcd"; // (1)
char a[20] = "abcd"; // (2)
在源代码中出现的字符串(用 ""
包括的内容)都是字符串常量。(1) 句是把指针指向字符串常量 "abcd"
的首字符;(2) 句则把字符串常量复制到字符数组中。显然前者不可修改,后者可修改。也就是说,此时a[]是指向栈区的,而a则指向文字常量区。一个是直接指向,一个是复制,而a其实也可以指向栈区,只要有栈区的变量。
3. string
string使用时可以看作字符数组,C++STL提供了string基本字符系列容器来处理字符串,可以把string理解为字符串类,他提供了添加删除,替换,查找和比较等丰富的方法,string内部封装了char*,管理这个字符串,是一个char*型的容器,并且还添加了上述功能相关的方法。string管理char*所分配的内存,不用担心赋值越界和取值越界等,都是由类的内部负责的。
虽然使用vector<string> 这样的向量也可以处理字符串,但功能比不上string。向量的元素类型可以是string,如vector<string>这样的向量,实际上就类似于C语言中的字符串数组;
使用string容器,需要包含头文件声明#include <string> ;
参考:https://blog.csdn.net/keshacookie/article/details/18356189
本文来自博客园,作者:FrankPlus,转载请注明原文链接:https://www.cnblogs.com/yztbky/p/16065391.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?