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++"语句,定义了一个数组,编译器为其再栈上分配了内存空间,因而可以进行修改操作。
总结如下:

  1. char str[]定义了数组,str可认为一个常指针不可改变,但str指向的内容可以发生改变。
  2. char *p定义了一个可变指针,p可以指向其他对象,但是对于char *p = "C++"这样的情况,p指向的是常量,故内容不能改变。

综上,C++提供的string类相比之下,要安全多了。

posted @   summerL  阅读(770)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
点击右上角即可分享
微信分享提示