char*和char[]的区别

本文探讨了C++中指针变量`s`与字符串字面量的交互,指出`s`指向的`'hello'`在常量区,而`s2`定义的数组在栈区并可修改。讨论了不同赋值方式下内存区域的变化,并强调了指针与字符串操作的限制,如`s`不能用于`strcpy`等函数。此外,提到了`s2`作为常量指针不可更改的事实,以及`sizeof`和`strlen`在计算数组和指针大小时的区别。
摘要由CSDN通过智能技术生成

char* s=“hello”

s是一个指针,*s的值为’h’,在栈区;

hello”是一个常量,在常量区(也就是在全局区,大致分为代码区,全局区,栈区,堆区)

在有些vs有些版本中是不能直接将“hello”直接赋值给s的(可以将“hello”强制转为 char * 或者用const char * s,将hello强转后,s指向的hello就不在常量区了)。

char* s="hello"后,不能改变s指向的字符串了,s不能作为strcpy、strcat等函数的第一个参数

char s2[]=“hello”

不能用s2=“hi”,应为s2指针是一个常量,不能改变

s定义也是一个指向的数组的指针,但是不是普通的指针,跟上述中s还是有区别的,这边的“hello”是放在栈区的,是可以改变的

其他

s2不是一个普通的指针,体现在sizeof(s2)和sizeof(s)得出来的结果是不一样的,sizeof是看占用内存,sizeof(s)是4,代表一个指针所占字节大小,sizeof(s2)是6,也是整个字符数组所占字节内存大小,包括‘\0’。但是strlen是计算字节长度的,都是5

s=0等价于s=NULL,字符串结尾 * s=0等价于 * s=‘\0’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值