[C++] C++之sizeof和strlen

参考

  • C++ Primer

sizeof运算符

sizeof运算符返回一条表达式或者一个类型名字所占的字节数,返回值是size_t类型的常量表达式。

size_t是一种机器相关的无符号类型,它被设计的足够大以便能表示内存中任意对象的大小。

sizeof (类型)
sizeof 表达式//返回表达式结果类型的大小,sizeof并不实际计算其运算对象的值

//定义一个student类型
struct student {
    std::string name;
    int number = 0;
}

student stu1, *p;
sizeof (student);//存储student类型的对象所占空间的大小
sizeof stu1;//stu1的类型的大小,即sizeof(student)
sizeof p;//指针所占的空间大小
sizeof *p;//等价于sizeof (*p),p所指类型的空间大小,即sizeof(student)
sizeof stu1.number;//student的number成员对应类型的大小
sizeof student::number;//另一种获取number大小的方式,作用域运算符来获取类成员的大小

注:因为sizeof不会实际求运算对象的值,所以即使p是一个空指针也是安全的,sizeof不需要真正解引用指针也知道它所指对象的类型

  • char或者类型为char的表达式执行sizeof运算,结果为1

  • 引用类型执行sizeof运算得到被引用对象所占空间的大小

  • 指针指针sizeof运算得到的得到指针本身所占空间的大小

  • 解引用指针指针指向sizeof运算得到指针指向的对象所占空间的大小,指针可以是空指针,只要知道指针所指向的对象类型

  • 数组执行sizeof运算得到整个数组所占空间的大小,等价于对数组中的所有元素各执行一次sizeof运算并将结果求和

    int a[] = {1, 2, 3, 4, 5};
    sizeof (a);//20;
    sizeof (*a);//4;
    sizeof (a[0]);//4;
    
    char a[] = {1, 2, 3, 4, 5};
    sizeof (a);//5;
    sizeof (*a);//1;
    sizeof (a[0]);//1;
    
  • string对象或者vector对象指向sizeof运算只返回该类型固定部分的大小,不会计算对象中的元素占用了多少空间

    vector<int> v1(10, 1);//10个元素,每个值都是1
    vector<int> v2{1};//1个元素,值为1
    string str1 = "a";
    string str2 = "aaaaa";
    
    sizeof v1;//24
    sizeof v2;//24
    sizeof str1;//32
    sizeof str2;//32
    

strlen

strlen是一种C风格字符串的函数,定义在头文件cstring中,cstring是C语言头文件string.h的C++版本

尽管C++支持C风格字符串,但在C++程序中最好还是不要使用它们。因为C风格字符串不仅使用起来不方便,而且极易引发程序漏洞

C风格字符串不是一种类型,而是为了表达和使用字符串而形成的一种约定俗成的写法。

size_t strlen(const char *str)//strlen的声明
char *p = "aaa";
char q[] = "bbbb";
strlen(p);//返回p的长度等于3,空字符不计算在内
strlen(q);//返回q的长度等于4,空字符不计算在内

C风格字符串的函数拓展

extern int strcmp(const char* str1, const char* str2);//函数原型
strcmp(p1, p2);//比较p1和p2的相等性,如果p1 == p2,返回0;如果p1 > p2,返回一个正值;如果p1 < p2,返回一个负值

extern char *strcat(char *dest,char *src);//函数原型
strcat(p1, p2);//将p2附加到p1之后,返回p1

extern char *strcpy(char *dest, const char *src);//函数原型
strcpy(p1, p2);//将p2拷贝给p2,返回p1
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值