sizeof与strlen

strlen("\0") =? sizeof("\0")=?

strlen("\0") =0,sizeof("\0")=2。

strlen用来计算字符串的长度(在C/C++中,字符串是以"\0"作为结束符的),它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描直到碰到第一个字符串结束符\0为止,然后返回计数器值sizeof是C语言的关键字,它以字节的形式给出了其操作数的存储大小,操作数可以是一个表达式或括在括号内的类型名,操作数的存储大小由操作数的类型决定。

sizeof和strlen有什么区别?

strlen与 sizeof的差别表现在以下5个方面。

  1. sizeof是运算符(是不是被弄糊涂了?事实上, sizeof既是关键字,也是运算符,但不是函数),而strlen是函数。 sizeof后如果是类型,则必须加括弧,如果是变量名,则可以不加括弧。

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

  3. sizeof可以用类型作为参数, strlen只能用char*作参数,而且必须是以“0结尾的。 sizeof还可以以函数作为参数,如int g(),则 sizeof(g())的值等于 sizeof( int的值,在32位计算机下,该值为4。

  4. 大部分编译程序的 sizeof都是在编译的时候计算的,所以可以通过 sizeof(x)来定义数组维数。而 strlen则是在运行期计算的,用来计算字符串的实际长度,不是类型占内存的大小。例如, char str[20] = "0123456789”,字符数组str是编译期大小已经固定的数组,在32位机器下,为 sizeof(char)20=20,而其 strlen大小则是在*运行期**确定的,所以其值为字符串的实际长度10。

  5. 当数组作为参数传给函数时,传递的是指针,而不是数组,即传递的是数组的首地址。

作者:嵌入式与Linux那些事

链接:https://www.nowcoder.com/discuss/641248?source_id=profile_create_nctrack&channel=-1

来源:牛客网

不使用 sizeof,如何求int占用的字节数?

#include <stdio.h>
#define MySizeof(value)  (char *)(&value+1)-(char*)&value
int main()
{int i;double f;double *q;printf("%d\r\n", MySizeof(i));printf("%d\r\n", MySizeof(f));printf("%d\r\n", MySizeof(q));return 0;
}

求某类型变量的大小(是否使用sizeof)相关推荐

  1. sizeof()来求一个类的大小

    基本概念 一个类的实例化对象所占空间的大小? 注意不要说类的大小,是类的对象的大小. 首先,类的大小是什么?确切的说,类只是一个类型定义,它是没有大小可言的. 用sizeof运算符对一个类型名操作,得 ...

  2. 左神算法:求最大子矩阵的大小(Java版)

    本题来自左神<程序员面试代码指南>"求最大子矩阵的大小"题目. 题目 给定一个整型矩阵 map,其中的值只有0和1两种,求其中全是1的所有矩形区域中,最大的矩形区域为1 ...

  3. C语言sizeof求结构体的大小

    运算符sizeof可以计算出给定类型的大小,对于32位系统来说,sizeof(char) = 1; sizeof(int) = 4.基本数据类型的大小很好计算,我们来看一下如何计算构造数据类型的大小. ...

  4. linux下c 指针变量大小,C语言sizeof关键字

    常年被人误认为函数. sizeof 是关键字不是函数,其实就算不知道它是否为32 个关键字之一时,我们也可以借助编译器确定它的身份.看下面的例子: int i=0: A),sizeof(int): B ...

  5. 栈与队列8——求最大子矩阵的大小

    题目 给定一个整形矩阵map,其中的值只有0和1,求其中全是1的所有矩形区域中,最大的矩形区域中1的数量,例如:1 1 1 0,其中最大的矩形区域有3个1,返回3. 再如: 1 0 1 1 1 1 1 ...

  6. 矩阵的逆矩阵怎么求_字节面试原题:求最大子矩阵的大小

    题目 给定一个整型矩阵 map,其中的值只有 0 和 1 两种,求其中全是 1 的所有矩形区域中,最大的矩形区域为 1 的数量. 例如: 1 1 1 0 其中,最大的矩形区域有 3 个 1,所以返回 ...

  7. 简述C语言中32个关键字

    在C语言中,一共有32个关键字,这些关键字我们可以将其非为两类:分别是数据类型关键字和流程控制类关键字.其中数据类关键字又可以分为A基本数据类型(5个).B类型修饰关键字(4个).C复杂类型关键字(5 ...

  8. 数组的操作-集大成篇

    目录 1.数组元素的查找 2.数组元素的插入 ①  伪代码 ②  代码 3.数组元素的删除 ①  伪代码 ②  代码 4.数组元素的检索 5.数组元素的遍历 (1)  小试牛刀:打印数组中每个元素 ① ...

  9. c语言获取结构体大小sizeof,C语言sizeof求结构体数组长度

    C语言sizeof求结构体数组长度 C语言sizeof求结构体数组长度 #include typedef struct ss{ char a;//偏移量为0,大小为1,0能被1整除,=1 short ...

最新文章

  1. Python使用matplotlib函数subplot可视化多个不同颜色的折线图、在折线图上为每个数据点添加数值标签
  2. U-Mail邮件网关测试勒索病毒样例图
  3. 凸透镜成像实验软件_论文丨几何光学实验在初中物理教学中的应用
  4. linux学习笔记-10.解压与压缩
  5. 在子线程中使用runloop,正确操作NSTimer计时的注意点 三种可选方法
  6. mysql 执行计划 代价_mysql explain执行计划详解
  7. c语言char类型溢出,C语言中数据溢出的问题---以char类型为例
  8. python3 shutil模块
  9. 红队技巧:绕过ESET_NOD32抓取密码(ESET_NOD32是一款杀毒软件)
  10. dedeCMS 会员中心注册登陆页面 - 模板修改
  11. 不同网段的局域网怎么互通_智能化工程中,局域网IP地址不够用怎么解决?
  12. FP Growth算法
  13. WinForm 窗体基本属性、公共控件
  14. yii2 错误处理
  15. “只要就“其实是废话,没有任何用处
  16. java读取配置文件路径问题
  17. 数据库“新增字段、删除字段、修改字段“
  18. STM32硬件编程_学习思路
  19. 如何防范动态调试(Anti-Debug)(SoftICE篇)
  20. 走进小作坊(二十)----商道:胡雪岩叱咤商场的经营智慧

热门文章

  1. 真实感水面绘制-资料收集
  2. C# unsafe模式内存操作深入探索
  3. 破解visual sourcesafe数据库admin用户密码
  4. rhel4 x86_64 php5.2.17 make安装 支持mysqli
  5. vscode如何彻底卸载
  6. Dubbo自定义日志拦截器
  7. IEnumeratorTItem和IEnumerator Java 抽象类和普通类、接口的区别——看完你就顿悟了...
  8. CentOS文件权限管理
  9. Linux查看端口使用状态及启动
  10. HashSet集合和TreeSet集合