sizeof、strlen、length、size

sizeof:sizeof(),他的参数可以是数组、指针、类型、对象、函数等。他是一个运算符,用来计算这个参数的所占的总的字节数。

strlen:strlen(),他的参数必须是字符型指针(char*),当数组名作为参数传入时,实际上数组就退化成指针了。他是一个函数用来返回这个参数中字符串的长度。我们来比较一下:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int five()
 5 {
 6     return 0;
 7 }
 8 
 9 int main()
10 {
11     char one[20] = "1234567890";
12     char *two = "9234567890";   //9234567890\0存储在常量区,two在栈上。下面解释
13     int three = 5;
14     string four = "1234567890";
18     cout << "sizeof(数组) = " << sizeof(one) << endl          //计算了参数占的总字节数
19         << "sizeof(字符型指针) = " << sizeof(two) << endl    //存储地址占了8个字节
20         << "sizeof(字符型指针) = " << sizeof(*two) << endl   //存储了一个字符,占了一个字节
21         << "two = " << two << endl
22         << "*two = " << *two << endl
23         << "sizeof(整型) = " << sizeof(three) << endl
24         << "sizeof(字符串) = " << sizeof(four) << endl
25         << "sizeof(函数) = " << sizeof(five()) << endl << endl;
26 
27     cout << "strlen(数组) = " << strlen(one) << endl          //返回参数中字符串所占的大小,遇到\0结束
28         << "strlen(字符型指针) = " << strlen(two) << endl
29 /*        << "strlen(整型) = " << strlen(three) << endl   //这三个报错,不能作为strlen的参数
30         << "strlen(字符串) = " << strlen(four) << endl
31         << "strlen(函数) = " << strlen(five()) << endl*/ << endl;
32 34     return 0;
35 }

结果为:

sizeof(数组) = 20
sizeof(字符型指针) = 8
sizeof(字符型指针) = 1
two = 9234567890
*two = 9
sizeof(整型) = 4
sizeof(字符串) = 32
sizeof(函数) = 4

strlen(数组) = 10
strlen(字符型指针) = 10

length、size:

这两个函数一样。 string类的size()/length()方法返回的是字节数,不管是否有汉字。

解释一下上面代码中遇到的问题:

char  *s ;

s = "China";
char  *s = "China";

 

上面这两种是一样的。为什么可以把一个字符串赋给一个指针变量。。这不是类型不一致吗???C++中编译器会给字符串常量分配地址,如果 "China", 存储在内存中的 0x3000 0x3001 0x3002 0x3003 0x3004 0x3005 。。。。s = "China" ,意思是什么,对了,地址。其实真正的意义是 s ="China" = 0x3000;看清楚了吧 ,你把China 看作是字符串,但是编译器把它看作是地址 0x3000,即字符串常量的本质表现是代表它的第一个字符的地址。。。。。。。。。。s = 0x3000这样写似乎更符合直观的意思。。。所以上面的我们two就是“9234567890”的首地址,而*two其实是一个字符的值。所以当打印two就相于数组的首地址一样打印出来整个字符串。而*two打印的是一个值。而为什么sizeof(two)打印出来是8呢,因为他是一个运算符,只计算这个地址所占的字节数,而strlen是函数,返回的是字符串的长度。


具体了解:https://m.imooc.com/article/30475

转载于:https://www.cnblogs.com/xiaodangxiansheng/p/10950161.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值