C++中的string与char[]、char*详解 您所在的位置:网站首页 遍历字符串什么意思啊 C++中的string与char[]、char*详解

C++中的string与char[]、char*详解

2024-07-02 01:56| 来源: 网络整理| 查看: 265

2020年7月15日 周三 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】

关于C++里的字符串和字符数组以及字符指针,一直都搞不太明白,今天在这里做个总结,希望能彻底弄懂它们。

本文目录 一、C++中两种风格的字符串:1. C-风格字符串2. C++中的string类 二、C++在定义字符串时,可能会出现以下几种形式:1. string2. char[]、const char[]、char*、const char*(1) char str1[] = "abc"(2) const char str3[] = "abc"(3) const char *str5 = "abc" 三、数组名char[] 和 数组指针char *1. 数组名和数组指针的显著不同点:(1) 数组名 b 可以看作指针常量(只能看作,并不是指针常量,具体代表什么后面会说),对应着数组的首地址,其值不能改变;b 对应的内存区域总是可写。(2) 数组指针 a 是变量,值可以改变;a 指向的区域有时可写,有时只读。 2. 数组名和数组指针的其它不同点(1) 数组名指代一种数据结构:数组另外, cout 打印字符数组名会得到整个字符串(仅字符数组): (2) 数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针。在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。 参考文献

一、C++中两种风格的字符串: C-风格字符串C++引入的string类 1. C-风格字符串

C-风格字符串起源于 C 语言,并在 C++ 中继续得到支持。C-风格字符串实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。下面是C-风格字符串的两种写法:

char a[6] = {'H', 'e', 'l', 'l', 'o', '\0'}; char a[] = "Hello";

这两种写法是等价的,若使用第二种写法,C++ 编译器在初始化数组时会自动把 ‘\0’ 放在字符串的末尾。

2. C++中的string类

C++ 标准库提供了 string 类类型,定义字符串的方法如下:

string a = "Hello";

string类有很多功能,这里就不详细叙述了。

二、C++在定义字符串时,可能会出现以下几种形式: stringchar[]Cconst char[]char*const char*

为啥会有这么多种呢?还不是指针和const搞的鬼~(指针、引用、const真是折磨啊) 我们先来说一说string容易搞错的地方,然后再详细叙述后四种的关系和区别。

文章目录 一、C++中两种风格的字符串:1. C-风格字符串2. C++中的string类 二、C++在定义字符串时,可能会出现以下几种形式:1. string2. char[]、const char[]、char*、const char*(1) char str1[] = "abc"(2) const char str3[] = "abc"(3) const char *str5 = "abc" 三、数组名char[] 和 数组指针char *1. 数组名和数组指针的显著不同点:(1) 数组名 b 可以看作指针常量(只能看作,并不是指针常量,具体代表什么后面会说),对应着数组的首地址,其值不能改变;b 对应的内存区域总是可写。(2) 数组指针 a 是变量,值可以改变;a 指向的区域有时可写,有时只读。 2. 数组名和数组指针的其它不同点(1) 数组名指代一种数据结构:数组另外, cout 打印字符数组名会得到整个字符串(仅字符数组): (2) 数组名作为函数形参时,在函数体内,其失去了本身的内涵,仅仅只是一个指针。在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。 参考文献

1. string

string是一个C++类库中的一个类,其本质是字符数组(char类型的数组)。它包含了对字符串的各种常用操作,它较char*的优势是内容可以动态拓展,以及对字符串操作的方便快捷,用 “+” 号进行字符串的连接是最常用的操作。有下面一段代码:

string a = "hello"; cout printf("%s %d %d\n",p1,p1,&p1); printf("%s %d %d\n",p2,p2,&p2); p2="asdf"; //通过! 说明p2不是常量! printf("%s %d %d\n",p2,p2,&p2); } void main(){ char a[]="Hello"; fun1(a,a); }

因此,在作为函数的形参时,char [] 被当做 char * 来处理,两种写法是完全等效的。

参考文献

https://blog.csdn.net/ksws0292756/article/details/79432329 https://blog.csdn.net/y519476132/article/details/9866001 https://blog.csdn.net/u013654125/article/details/79758286#commentBox

文章到此基本也就告一段落了,如果有错误的地方还请大家帮忙指出呀,欢迎大家在评论区互相交流,共同进步~



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有