举例:
#include <bits/stdc++.h>
using namespace std;
int main() {
const char* str1 = "hello,world";
char str2[15] = "hello,world";
char str3[12] = { 'h','e','l','l','o',',','w','o','r','l','d' };
char str4[] = "hello,world";
cout <<"str1输出:" <<str1 << endl;
cout << "str2输出:" << str2 << endl;
cout << "sizeof(str1):" << sizeof(str1) << endl;
cout << "sizeof(str2):" << sizeof(str2) << endl;
cout << "sizeof(str3):" << sizeof(str3) << endl;
cout << "sizeof(str4):" << sizeof(str4) << endl;
cout << endl;
cout << "strlen(str1):" << strlen(str1) << endl;
cout << "strlen(str2):" << strlen(str2) << endl;
cout << "strlen(str3):" << strlen(str3) << endl;
cout << "strlen(str4):" << strlen(str4) << endl;
return 0;
}
const char* str1 = “abcde”;
char str2[] = “abcde”;
char str3[8] = {‘a’ };
char str4[] = “123456789”;
- str1是一个指针,指向字符串"abcde"。所以sizeof(str1)不是字符串占的空间也不是字符数组占的空间,而是一个指针所占的空间。
- str2是一个字符型数组,对于一个数组,返回这个数组所占的总空间,所以sizeof(str2)取得的是字符串"abcde"的总空间。"abcde"中,共有a
b c d e \0六个字符,所以str2数组的长度时6。 - str3已经定义成了长度为8的数组,所以sizeof(str3)为8;
- str4和str2类似,共十个字符,所以str4所占的空间是10.
strlen为字符串长度,用法:int strlen(char * str),返回字符的个数
从原理理解char str1="abcde"和char str2[]="abcde"的区别
1.首先我们需要了解它们分别代表着什么
char *str1 = “abcde”(此时定义的为字符串常量)
char str2[] =“abcde”(此时定义的为字符数组)
str1是一个指针,其初值指向一个字符串常量,其可以被修改以指向其他地址,但无法修改字符串的内容
str2[]是一个数组,存放初始化字符串及’\0’的一维数组,其始终指向同个存储地址,但可修改字符串内容
2.实际应用中的不同点
(1)如果我们想将“abcde"中的’a’修改为’x’,我们可能会这样做
str1[0]=‘x’//error
str2[0]=‘x’//ok
原因在于str1为指针只能改变其指向地址,str2为数组可改变其内容
————————————————
版权声明:本文为优快云博主「Vvaaz」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/Vvaaz/article/details/89281804