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

这篇具有很好参考价值的文章主要介绍了C++中sizeof()、size()、strlen()、length()详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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;

}

输出结果:文章来源地址https://www.toymoban.com/news/detail-853483.html

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

到了这里,关于C++中sizeof()、size()、strlen()、length()详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入解析C++中sizeof和strlen的奥秘:区别、应用与技巧全揭秘!

      sizeof  和  strlen  是 C++ 中用于处理字符串的两个不同的操作符,它们的作用和使用场景有很大的区别。 sizeof  是一个运算符,不是一个函数,用于获取一个类型或变量的字节大小。 对于数组, sizeof  返回整个数组的字节大小。 对于指针, sizeof  返回指针本身的字节大小

    2024年01月25日
    浏览(43)
  • strlen和sizeof的区别

    相信大多数初步了解C语言的小伙伴们,应该对strlen和sizeof都不陌生,但是在使用时总会出现或多或少的疑问,我将用这一篇博客解决困扰大家许久的问题( 仅此一篇你就会了解的透彻 ),请耐心阅读!!! 在深究strlen和sizeof的区别时,首先我们需要知道这两个函数所执行的

    2024年02月02日
    浏览(29)
  • C语言sizeof和strlen的区别?

    sizeof本质是运算符(sizoof既是也是运算符,不是函数哈),而strlen就是函数。sizeof后面如果是类型,则必须加括号,如果是变量,可以不加括号。 sizeof运算符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能够容纳实现所建立的最大对象的字节大

    2024年02月10日
    浏览(34)
  • 【C语言之区分sizeof 和 strlen】

    前言: 首先,我们需要明白它们的 根本区别,sizeof属于也属于单目操作符,而strlen属于库函数 / 知识点回顾 / 单目操作符:单目运算符对应只有一个操作数 常见的单目操作符: 常见的单目操作符 描述 ! 逻辑非 ’ - ‘ 负 ’ + ‘ 正 取地址 sizeof 计算一个数据类型的

    2024年02月11日
    浏览(33)
  • sizeof和strlen求取数组&指针之辨析

    目录 一维数组中sizeof Vs  strlen 整型数组sizeof 字符数组 sizeof strlen  字符串数组 sizeof strlen  字符串的指针char *p sizeof strlen  二维数组中sizeof  总结 今天主要来讲题目主要是数组指针辨析题和笔试题。🆗最近心情有点焦虑。大家一定专注眼前的事情,别太焦虑。 数组名:就是

    2024年02月07日
    浏览(31)
  • 【C语言】指针进阶之sizeof和strlen函数的对比

    目录  1.sizeofyu 2.strlen函数   3.sizeof与strlen的对比   sizeof计算变量所占内存内存空间 大小 的,单位是 字节 ,如果操作数是类型的话,计算的是使⽤类型创建的变量所占内存空间的大小。 sizeof 只关注占⽤内存空间的大小,不在乎内存中存放什么数据。 举个例子: 运行结果

    2024年01月22日
    浏览(44)
  • C语言之数组与strlen与sizeof区别和应用

    1.strlen 和 sizeof没有什么关联 2.strlen 是求字符串长度的-只能针对字符串求长度 - 库函数 - 使用得引头文件 3.sizeof 计算变量、数组、类型的大小-单位是字节 - 操作符 #includestdio.h int main() {     char arr1[] = \\\"abc\\\";     char arr2[] = { \\\'a\\\',\\\'b\\\',\\\'c\\\' };     printf(\\\"%dn\\\", sizeof(arr1));//4      

    2024年01月17日
    浏览(32)
  • C语言中常用的字符串函数(strlen、sizeof、sscanf、sprintf、strcpy)

      strlen即为string length,顾名思义该函数是用来求字符串长度的。在介绍strlen函数之前,我们要先介绍一下\\\"\\0\\\"这个转义字符。任何一个字符串后面都会隐藏一个\\\"\\0\\\",该转义字符是字符串结束的标志,所以我们在使用strlen函数求字符串长度时,遇到\\\"\\0\\\"时停止读取,此时\\\"\\0\\\"前的

    2024年01月18日
    浏览(37)
  • matlab 获取矩阵大小、行数、列数、元素总个数——size()/length()/numel()

    size:获取数组的行数和列数 s=size(A),当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时数组的行数,第二个元素是数组的列数。 [r,c]=size(A),当有两个输出参数时,size函数将数组的行数返回到第一个输出变量,将数组的列数返回到第二个输出变量。 如果在s

    2024年02月11日
    浏览(33)
  • Java参数校验@Valid中@Length和@Size的用法和区别

    在Spring框架中,@Length和@Size都是用于参数长度校验的注解,但它们之间存在一些关键的区别: @Length 是Hibernate Validator提供的一个注解,它用于校验字符串的长度。 @Size 也是Hibernate Validator提供的注解,但它可以用于多种数据类型,不仅仅是字符串。对于字符串,它可以校验长

    2024年04月15日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包