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个字节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值