C/C++语言中char*和char[]的区别

一般来说,很多人会觉得这两个定义效果一样,其实差别很大。
以下是个人的一些看法,有不正确的地方望指正。

char* s = “abcd”; 本质上是定义了一个char型指针,它存储在字符常量区;

char s[] = “abcd”; 本质上是一个char型数组,存储在栈空间里,它实际上相当于
char s[] = {‘a’,‘b’,‘c’,‘d’,’\0’};

因此,这三者的sizeof(s):

char* s =  "abcd";// sizeof(s) = 8
char s[] = "abcd"; // sizeof(s) = 5
char s[] = {'a','b','c','d'};// sizeof(s) = 4

测试:

	char* ss = "this is char*";
	char ss1[] = "this is char[]";

	std::cout << "sizeof char*: " << sizeof(ss) << std::endl;
	std::cout << "sizeof char[]: " << sizeof(ss1) << std::endl;

结果:
在这里插入图片描述
说明:
对于char* ss = “this is char*”; ss表示地址,在64位系统中,地址有8个字节;
对于char ss1[] = “this is char[]”; ss1是数组首地址,sizeof(ss1)表示数组大小,
ss1末尾自动添加’\0’,因此是15个字节。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章