char str[]和char* str的区别
C语言中对字符串操作主要有两种方式,一个是使用字符数组char str[];另一个是使用字符指针。二者区别如下。
字符数组
使用char str[]定义字符数组str,中括号可以表示数组大小,也可以不写,如果不写数字,则必须为字符数组提供初始值,以便编译器进行内存分配。
可以使用字符串面值(string literal)初始化字符数组,也可以使用字符字面值(character literal)初始化,如:
char str1[10] = "hello";
char str2[] = "world";
char str3[] = {'h','e','l','l','o'};
str1和str2使用字符串面值进行初始化,字符串使用'\0'进行结束,因为str2的长度为6,需要将'\0'计算在内。使用strlen函数计算的是字符串的实际长度,不包含'\0'。
字符指针
可以使用char *ptr指向一个字符串,如:
char *ptr = "C++";
char strArr[] = "C++";
char *ptr2 = strArr;
使用cout << ptr即可输出整个字符串,而是用cout << *ptr则输出的是字符串的首字符。
区别
二者的不同之处如下一段代码:
char str[] = "C++";
str[0] = 'c';//正确
char *p = "C++";
p[0] = 'c'//不正确
原因在于两种方式对字符串数组的操作机制不同。使用char *p = "C++"后,编译器在内存的文字常量区分配一块内存,保存"C++"这一字符串的值,然后再栈上分配内存保存p,p的内容为"C++"的地址。p[0] = 'c'试图修改常量"C++",导致程序崩溃。而char str[] = "C++"语句,定义了一个数组,编译器为其再栈上分配了内存空间,因而可以进行修改操作。
总结如下:
- char str[]定义了数组,str可认为一个常指针不可改变,但str指向的内容可以发生改变。
- char *p定义了一个可变指针,p可以指向其他对象,但是对于char *p = "C++"这样的情况,p指向的是常量,故内容不能改变。
综上,C++提供的string类相比之下,要安全多了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类