c++ 字符串

c++中的字符串有多种表示方法,先把char[]和char*总结一下

char* str1 = "abcd" 一般这种,书上都会说后面自动加了一个null和char str1[]="abcd"一样,以及char str1[]={'a','b','c','d','\0'}一样,如果char str1[]={'a','b','c','d'}就缺了一个null

既然char* str1="abcd"后面有一个null,那么在程序中用'\0'当判定值是会无限循环的,因为char*的null是真正的null,你可以在程序中用while(str1!=NULL)或while(str1)来判定,这是数组和指针的一个区别。而对于数组形的char str2[] ="abcd",用while(str2[i]!='\0')或者while(str2[i])都可以来判断结尾,就是这个'\0'在char str2[]中和null是一样的。

还有就是这两种的长度,如果用strlen(str1)来求长度时,这个strlen会用一个null来判定字符串的结尾,char str1[]="abcd"这里会自动加一个null,虽然我们用'\0'判断,char*就不说了;如果对char str1={'a','c','d'}进行strlen(str1)时,我们知道这个str1没有null,那么这个函数也不会崩溃,会一直找到null为止,算出一个length,这个length一般比我们预期的要大。。。。

另外这个null对长度有影响么,没影响,几个字母就是多长,null在求长度时,只是当作一个标志,不算在字符串的长度内。


而且数组和指针有一个重要的区别,虽然二者都是一个地址,其实有很大的差别,这个学渣还没捉摸透,先不祸祸大家了,比如char str1[]="abcd" 和 char*str2="abcd"看起来差不多,但是char[]数组类型的这个str1不能随便改,比如进行str1++这个是错误的,好像说是栈还是怎么的,算是一个const类型。其余的这两个都差不多,cout之类的都一样,而且*str1就是a,但是str1不能++,所以不能操作后面的字符,可以赋值给别的好像。。。。str2[0]就是a,而且指针没那么死,可以str2[1]等操作。。。。。。甚至你可以str2[10000],但是得到的就不知道是嘛了。。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值