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时,要考虑溢出问题。
两个函数都是返回字符串中字符数目,暂时没有发现区别。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这四个函数的作用都与获取数据的长度有关,但具体用法和适用范围有所不同。 1. sizeof() sizeof() 是 C/C++ 中的一个操作符,用于获取数据类型或变量在内存中所占的字节数。例如: ```c++ int a; size_t size = sizeof(a); ``` 这里 size 变量的值为 4,因为 int 类型在大多数系统上占用 4 个字节。 2. strlen() strlen() 是 C/C++ 中的一个函数,用于获取字符串的长度,不包括字符串末尾的 null 字符。例如: ```c++ char str[] = "hello"; size_t length = strlen(str); ``` 这里 length 变量的值为 5,因为 "hello" 这个字符串共有 5 个字符。 3. length() length() 是 C++ STL 中的一个函数,用于获取容器(如 std::string、std::vector 等)中元素的个数。例如: ```c++ std::string str = "hello"; size_t length = str.length(); ``` 这里 length 变量的值为 5,因为 "hello" 这个字符串共有 5 个字符。 4. size() size() 是 C++ STL 中的一个函数,用于获取容器(如 std::string、std::vector 等)中元素的个数。与 length() 函数相似,但返回值类型不同,size() 函数返回的是一个无符号整数类型(如 size_t),而 length() 函数返回的是一个有符号整数类型(如 int)。例如: ```c++ std::vector<int> vec = {1, 2, 3, 4, 5}; size_t vec_size = vec.size(); ``` 这里 vec_size 变量的值为 5,因为 vec 容器中共有 5 个元素。 总结: | 函数/操作符 | 适用范围 | 返回值类型 | 作用 | | --- | --- | --- | --- | | sizeof() | 任何数据类型或变量 | 无符号整数类型(如 size_t) | 获取数据类型或变量在内存中所占的字节数 | | strlen() | 字符串 | 无符号整数类型(如 size_t) | 获取字符串的长度 | | length() | 容器(如 std::string、std::vector 等) | 有符号整数类型(如 int) | 获取容器中元素的个数 | | size() | 容器(如 std::string、std::vector 等) | 无符号整数类型(如 size_t) | 获取容器中元素的个数 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值