C++中sizeof()、size()、strlen()、length()详解

文章讲述了C++中size()函数与sizeof()运算符的区别,前者在运行时计算数组元素个数,适用于字符串和容器;后者在编译时确定数据类型或变量的字节大小,不适用于动态内存。文中通过示例对比了两者在整型、字符串和字符数组中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、size 是一个函数,它是在程序运行时才会计算,用来求数组或容器中元素的个数
在字符串string中它与length的作用相同,只是length只能应用于string中,而不能应用于STL的容器中
2、sizeof 为运算符其结果是求对应参数的字节大小,它的值是在编译的时候就计算完成了。所以它不能用来计算动态分配内存空间的大小。
两者关系:size(某数组)=sizeof(某数组)/size(数组类型)
3、strlen是函数,在程序运行时才会执行计算。其参数必须时字符型指针(char *)。当以字符数组名作为参数传入时,实际上字符数组就退化成指针了。该函数会返回字符串的长度该长度不包含结尾的结束标志\0
4.length是一个函数,C++中length()函数只能用来获取字符串长度,不包括\0。

案例1:size()或sizeof()求数组元素个数、字节大小

#include <iostream>
#include <numeric>
using namespace std;
int main() {
//整型数组
  int num[5] = {1, 2, 3, 4, 5};
  cout << "num=0x" << num<< endl  //输出为起始内存地址,num+1为数组初始地址+数据大小,逐个输出要for循环num[i]
       << "sizeof(int)=" << sizeof(int)<<endl   //sizeof运算符用于求数据类型或变量占用的内存空间
       << "sizeof(num)=" << sizeof(num) << endl
       << "size(num)= "<< size(num) << endl
       << "sizeof(num) / sizeof(int)="<< sizeof(num) / sizeof(int) << endl<<endl;

//字符串数组
  string character1[6] = {"1", "5a", "6", "6","l"};  // string类型,32位占4G,64位占1G
  cout << "character1=0x" << character1<< endl //输出为起始内存地址
       << "sizeof(string)=" << sizeof(string) << endl  //字符串(string)不是C++的基本数据类型,用sizeof求它占用内存的大小没有意义
       << "sizeof(character1)=" << sizeof(character1) << endl
       << "size(character1)= " << size(character1) << endl
       << "sizeof(character1) / sizeof(string)=" << sizeof(character1) / sizeof(character1) << endl<<endl;

//字符数组
  char character2[5] = {'1', 'a', 'b', 'a5','5\0'};//超出只保留最后一位,且没有"\0"会一直寻找直至找到"\0",导致内存疯狂占用,所以数组每次使用前进行初始化
  cout << "character2=" << character2 << endl
       << "sizeof(char)=" << sizeof(char) << endl
       << "sizeof(character2)=" << sizeof(character2) << endl
       << "size(character2)= " << size(character2) << endl
       << "sizeof(character2) / sizeof(string)="
       << sizeof(character2) / sizeof(character2) << endl;
  }

执行结果:

num=0x000000186F0FF548
sizeof(int)=4
sizeof(num)=20
size(num)= 5
sizeof(num) / sizeof(int)=5

character1=0x000000186F0FF580
sizeof(string)=40
sizeof(character1)=240
size(character1)= 6
sizeof(character1) / sizeof(string)=1

character2=1ab5
sizeof(char)=1
sizeof(character2)=5
size(character2)= 5
sizeof(character2) / sizeof(string)=1

案例2:sizeof()求字符串长度

#include <iostream>
#include <numeric>
#include<iomanip>
using namespace std;

int main() { 
    //浮点型
    float   float1 = 0.568416996;//超出部分四舍五入,32位系统下,6~7位有效数字,6精度可以保证
    double  double1 = 0.23564876824368;//32位系统下,15~16位有效数字,15精度可以保证
    long double ldouble1 = 36.256523564876824368;
    cout
        << "float1=" << float1 << endl  // cout默认六位精度
        << "float1=" << setprecision(8) << float1 << endl  // 改成8精度,使用setprecision,头文件#include<iomainip>,但第7位后就会出现错误
        << "float1=" << fixed << setprecision(9)<< float1  // 加了fixed意味着是固定点方式显示,所以这里的精度指的是小数位6位
        << "  sizeof(float1)=" << sizeof(float1) << endl
        << endl;  // cout默认六位精度
    cout << "double1=" << double1<< endl
         << "float1=" << setprecision(8) << double1<< endl
         << "float1=" << fixed << setprecision(6) << double1
         << "  sizeof(double1)=" << sizeof(double1) << endl
         << "ldoble1=" << ldouble1 << "  sizeof(1double1)=" << sizeof(ldouble1)<<endl //long double的小数点控制同上
         << endl;
         
    //字符、字符串
    string string1 = "wp#@";
    char char1 ='W';
    cout << "string1="<<string1<<endl
         << "size(string1)=" << size(string1) << endl
         << "sizeof(string1)=" << sizeof(string1) <<endl<<endl//输出4*7=28,单个字符占7位,string内存位不固定?
         << "char1=" << char1 << endl  // size不能用于非数组非容器,string可用
         << "size(char1)=" << sizeof(char1) << endl;

}

输出结果:

float1=0.568417
float1=0.56841701
float1=0.568417013  sizeof(float1)=4

double1=0.235648768
float1=0.23564877
float1=0.235649  sizeof(double1)=8
ldoble1=36.256524  sizeof(1double1)=8

string1=wp#@
size(string1)=4
sizeof(string1)=40

char1=W
size(char1)=1
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

步达硬件

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值