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

浙公网安备 33010602011771号