以下内容参考自《程序员面试宝典》

sizeof与strlen的区别

1. sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。该类型保证能容纳实现所建立的最大对象的字节大小。

2. sizeof是运算符;strlen是函数。

3. sizeof可以用类型做参数,strlen只能用char**做参数,且必须是以'\0'结尾的。sizeof还可以用函数做参数,例如:

short f();
printf("%d\n", sizeof(f()));

输出结果为2,即sizeof(short)。

4. 数组做sizeof的参数不退化,传递给strlen就退化为指针。

5. 大部分编译程序在编译时就已经计算了sizeof,是类型或者是变量的长度,这就是sizeof(x)可以用来定义数组维数的原因;strlen的结果要在运行时才能计算出来,返回字符串的长度(不包括'\0'),而不是类型所占内存的大小。

char str[20] = "0123456789";
int a = strlen(str);    // a = 10
int b = sizeof(str);    // b = 20

6. sizeof后如果是类型必须加括号,如果是变量名可以不加括号,因为sizeof是操作符而不是函数。

7. 当使用了一个结构类型或变量时,sizeof返回实际的大小。当使用了一个静态的空间数组时,sizeof返回全部数组的尺寸。sizeof操作符不能返回动态分配内存的数组或外部数组的尺寸。

cout << sizeof(bool) << endl;    // 1
cout << sizeof(char) << endl;    // 1
cout << sizeof(short) << endl;   // 2
cout << sizeof(int) << endl;     // 4
cout << sizeof(unsigned int) << endl;  // 4
cout << sizeof(size_t) << endl;  // 8
cout << sizeof(long) << endl;    // 4
cout << sizeof(float) << endl;   // 4
cout << sizeof(double) << endl;  // 8
cout << sizeof(string) << endl;  // 32

8. 数组作为参数传给函数时传递的是指向数组首地址的指针而不是数组,在函数中使用sizeof得到的是指针的大小而不是数组的大小。如果想在函数内得到数组的大小,需要将长度作为参数传进去。

char a[10];
cout << sizeof(a) << endl;    // 10
char *b = a;
cout << sizeof(b) << endl;    // 8

9. 计算结构变量的大小必须讨论数据对齐的问题。为了加快CPU存取速度,C++在处理数据时经常把结构变量中的成员的大小按照4或8的倍数计算,这就叫做数据对齐(data alignment)。MS VC++中的对齐设定,有时候sizeof得到的与实际不等。一般在VC++中加上#pragma pack(n)的设定即可。或者如果要按字节存储,而不进行数据对齐,可以在Options对话框中修改Advanced Compiler选项卡中的“Data Alignment”为按字节对齐。

struct s{char a;int b;
};
cout << sizeof(s) << endl;    // 8

10. sizeof操作符不能用于函数类型、不完全类型或位字段。不完全类型指具有未知存储大小数据的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。

sizeof与strlen的区别相关推荐

  1. Sizeof与Strlen的区别与联系(转)

    一.sizeof sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组.指针.类型.对象.函数等.     它的功能是:获得保证能 ...

  2. C语言中sizeof与strlen的区别总结!

    C语言中sizeof与strlen区别总结! 先上一个例子: 结果: 一.sizeof与strlen char c[] = "abc\0cba"; 问题1:sizeof(c) = ...

  3. Sizeof与Strlen的区别与联系

    Sizeof与Strlen的区别与联系(转) 1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型. 该类型保证能容纳实现所建立的最大对象的字节大小 ...

  4. C语言 - sizeof和strlen的区别

    sizeof和strlen的区别: 1.sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型. 该类型保证能容纳实现所建立的最大对象的字节大小. 2.s ...

  5. sizeof和strlen的区别(其中涉及NUL的讲解)

    本文是自己结合平时所学的知识,对sizeof和strlen的区别进行了总结,如有不对的地方还请批评指证,共同进步!!! 一.从C语言的定义上来讲 1.sizeof是关键字,而strlen是包含在str ...

  6. C语言 sizeof 和 strlen 函数区别 - C语言零基础入门教程

    目录 一.sizeof 函数与 strlen 函数区别 1.获取字符串长度 – 针对字符串 2.获取指针/数组长度 – 针对指针/数组 3.sizeof 获取内存大小 4.经典案例 二.猜你喜欢 零基 ...

  7. 详说sizeof与strlen的区别与联系

    sizeof是C/C++中的关键字,它是一个运算符,其作用是取得一个对象(数据类型或者数据对象)的长度(即占用内存的大小,以byte为单位). 当参数分别如下时,sizeof返回的值表示的含义如下: ...

  8. 简述sizeof和strlen的区别

    sizeof和strlen的区别 属性不同: sizeof是运算符(关键字),strlen是函数 用法不同: sizeof可以使用类.结构体.共用体以及其他用户自定义的数据类型作为参数,然后计算相应的 ...

  9. C语言中的sizeof()和strlen()的区别

    C语言中的sizeof和strlen的区别 sizeof() strlen 大量案例(想深入了解可以看) 1.(花括号int的sizeof()) 2.(花括号char的sizeof()) 3.(字符串 ...

最新文章

  1. jsp error-page没有生效
  2. 苹果连接电脑只能充电_苹果 iPhone 12 曝充电 Bug:多口充电器无一幸免 只能用单独充电头 - 手机 - IT商业网...
  3. mysql正在加载_本地坏境或者服务器环境下phpmyadmin出现始终正在加载问题的解决方法...
  4. maven仓库找不到需要的jar包解决办法-转载
  5. HTML5和CSS3不仅仅是两项新的Web技术标准
  6. Centos7下实现多虚拟机互信
  7. 沪江日语电台首度在线直播后续花絮(附直播片段)
  8. 慢查询日志分析工具mysqldumpslow
  9. 计算机表格功能怎么用,Excel表格开发工具中的查看代码功能怎么使用
  10. 软考_高级《系统分析师》考试大纲
  11. Android连接MySQL数据库
  12. FineReport 创建报表模板
  13. 2020支付宝五福AR图
  14. 使用aria2批量下载微博相册
  15. win7 按修改时间范围文件搜索
  16. 用Eclipse读取excel中全部数据
  17. zoc 下载服务器上数据出现的问题
  18. 为网页承载页面添加更多功能
  19. 力扣 P 344 反转字符串
  20. 测试中文编码_如何通过带回家的编码测试

热门文章

  1. stm32万年历流程图_STM32 万年历 显示年月日 时分秒 星期
  2. flash制作车轮转动的汽车沿着路径走的动画
  3. php面试英文自我介绍范文带翻译,英语自我介绍范文带翻译
  4. 湘潭大学自考计算机,湘潭大学自考专业
  5. 华为IPTV解决方案总体介绍
  6. Kaggle比赛之Artifical Neural Networks Applied to Taxi Destination Prediction代码整理
  7. endnote中CWYW无文件_Endnote软件的使用,有图有干货!
  8. 操作系统安全-第一章-引言
  9. c3p0详细配置(c3p0-config.xml)及使用
  10. vue cli3源码解析