sizeof()、size()、length()

编程刷题中碰到的问题,由于对sizeof()的理解有误,认为sizeof()与函数size()和函数length()功能一样,导致我一个下午都在找错,最后终于……说多了都是泪……
然后就在网上找解答,参考如下文章:
(1)http://www.cnblogs.com/wanghetao/archive/2012/04/04/2431760.html
这篇文章探讨sizeof(),真的非常详细,下面一些就是节选自其中。为了加深印象,我还是写了一遍。这里,对作者君深表感谢。敬礼!
(2)size()部分参考了百度知道的回答,自己写代码进行验证了。地址如下:
http://zhidao.baidu.com/link?url=mugf4jv8rY5CPHbwmffldKOVmXgMPxfwLSqlqRNQYMJEG-JCIgLaaZcyAwOyQKlJ4h0f21N16F4KsMEHfP203_
1.sizeof()

sizeof()不是函数,也不是一元操作符,在编译时,将()内的当做类型进行计算大小,而不管其中的具体表达式或者对象名、函数名。

例如:
sizeof(int)== 4;//int类型大小为4
sizeof(char) == 1;
int i=3;
sizeof(i)==>当做sizeof(int)==4;//int类型大小为4
sizeof(5)==>当做sizeof(int)==4;

若其中是表达式,或函数,对象,则结果是表达式值类型大小,函数返回值类型大小,对象类型大小。
注意:
(1)函数返回类型不能是void。
(2)指针大小都是4.(32位机器)
(3)unsigned只影响数据最高位的意义,数据取值范围,而不改变类型大小。sizeof(int)==sizeof(unsigned int)==4.

如:
int a=2, b=3;
sizeof(a+b)==sizeof(a+3)==sizeof(2+3)==>都当做sizeof(int)==4
而且并不计算其中的表达式
int f();
sizeof(f())==>当做sizeof(int)==4
sizeof(a=9)==sizeof(a=a+b)>当做sizeof(int)==4
cout << a ;输出2;也就是说,并没有进行赋值、运算,a依然为2;
所以不能简单当做一元操作符。

主要有两种形式:
(1)sizeof(object);
也可写成sizeof object;
如:sizeof(8) ==>true; sizeof 8 ==>true;
(2)sizeof(typename);
不可写成sizeof typename;
如:sizeof(int) ==>true; sizeof int ==>false;

为了预防万一,统一写成sizeof().

2.size()与length()
看下面的例子:
string a;
a.size()==0; 返回的是无符号整型

vectora(5);
a.size() ==5;返回的是无符号整型

vectora(5)
a.size()==5; 返回的还是无符号整型

string::size_type是string对象的一个属性,可以用于定义string的size类型,而由于string::size_type是无符号型,则它可以存储的长度是有符号型的两倍。int类型变量最大只能存储32767个字符的string对象,如果用string来读一个文本文件,轻易就会多于32767个字符。为了避免溢出,保存一个string对象size的最安全的方法就是使用标准库类型string:: size_type。

计算string中的元素个数用size()就可以了。

读取string中的某个字符可以用下标进行操作。
例:
string s = “hello”;
s[0] 就是字符串的第一个字符, s[1] 就表示第二个字符(如果有的话),而 s[s.size() - 1] 则表示 s 的最后一个字符。

用以下方法依次读取s中的字符
for (string::size_type i = 0; i != s.size(); ++i)
cout << s[i] << endl;

size()与length()的返回值都是无符号int值,当将其赋值给int时,要考虑溢出问题。
两个函数都是返回字符串中字符数目,暂时没有发现区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值