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

您可能感兴趣的与本文相关的镜像

Wan2.2-T2V-A5B

Wan2.2-T2V-A5B

文生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

### C/C++ 中 `strlen` `sizeof` 的区别 在 C/C++ 编程语言中,`strlen` 函数用于计算字符串的实际长度(不包括终止符 `\0`),而 `sizeof` 运算符则返回变量或数据类型的字节数。 对于字符数组而言: - 使用 `strlen` 可以获取实际存储的有效字符数。例如,在处理动态输入或者不确定大小的字符串时非常有用[^1]。 ```cpp char str[] = "example"; size_t len_str = strlen(str); // 返回7, 不计'\0' ``` - 而 `sizeof` 则会给出整个数组所占内存空间的总大小,这包含了可能存在的多余未初始化部分以及结尾处的空字符 `\0`[^2]。 ```cpp char str[] = "example"; size_t size_arr = sizeof(str); // 返回8, 包括'\0'在内的全部字符数量 ``` 当涉及到其他类型的数据结构如自定义结构体时,情况有所不同。比如下面的例子展示了如何定义并操作一个简单的行星信息结构体: ```cpp struct planet { char name[20]; double population; double g; }; planet earth = {"Earth", 7e9, 9.8}; size_t size_planet = sizeof(earth); // 计算该实例占用的空间总量 ``` 需要注意的是,如果尝试对指针应用 `sizeof`,那么得到的结果将是该平台下指针本身的尺寸而非其所指向对象的真实规模;而对于通过指针访问的内容,则应采用适当的方法来确定其有效范围,例如利用 `strlen` 对于字符串的情况。 关于 `length()` 方法 `size()` 方法的应用场景主要取决于具体容器类的设计。通常来说: - 字符串类 (`std::string`) 提供了成员函数 `length()` 或者 `size()` 来查询内部保存序列的逻辑长度; - 容器类(如向量 `vector<T>`)一般提供 `size()` 成员函数表示当前元素数目,并且还有 `capacity()` 表明分配了多少额外容量以备将来增长之需。 综上所述,理解这些概念有助于编写更加高效且不易出错的程序代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值