sizeof,sizeof与strlen的区别

简介: sizeof,sizeof与strlen的区别



一.sizeof介绍

       sizeof是一个关键词也是操作符,专门用来计算类型或者变量大小,其实sizeof也可以计算数组的大小,单位都是字节。sizeof是一个非常有用的工具:

       sizeof操作符的操作数可以是类型,也可以是变量或者表达式。

sizeof(类型)

sizeof 表达式

  • sizeof的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号。
  • sizeof后边的表达式是不真实参与运算的,根据表达式的类型来得出大小。
  • sizeof的计算结果是size_t类型的。

( size_t:

sizeof运算符的返回值,C语言只规定是无符号整数,并没有规定具体的类型,而是留给系统自己去决定,sizeof到底返回什么类型。不同的系统中,,返回值的类型有可能是unsigned int,也有可能是unsigned int,甚至是unsigned long long,对应的printf()占位符是%u ,%lu,%llu 。这吧利于程序的可移植性。

C语言提供了一个解决方法,创造了一个类型别名size_t,用来统一表示sizeof的返回值类型。对应当前系统的sizeof的返回值类型,可能是unsigned int,也可能是unsigned long long。)

比如:

#include<stdio.h>
int main()
{
  int a=10;
  printf("%zd\n", sizeof(a));
  printf("%zd\n", sizeof a);//a是变量的名字,可以省略掉sizeof后边的()
  printf("%zd\n", sizeof(int));
  printf("%zd\n", sizeof (3 + 3.5));
  return 0;
}

运算结果:


       当我们占位符使用%d时,编译器会报错,但程序能运行

如:

#include<stdio.h>
int main()
{
  int arr[10] = { 0 };
  printf("%d\n", sizeof(arr));
  return 0;
}//返回40

1.1sizeof中表达式不计算

       在sizeof运算符中,表达式不会被计算,因为sizeof运算符返回的是数据类型的字节数,而不是表达式的值。表达式仅用于确定数据类型。

#include<stdio.h>
int main()
{
  short i = 2;//字节为2
  int j = 10;
  printf("%zd\n", sizeof(i = j + 1));
  printf("i=%d\n", i);
  return 0;
}

运行结果:

这是因为sizeof运算符返回的是short类型的字节数,而不是i=j + 1表达式的值。

1.2sizeof计算数组大小

       数组大小=有效元素个数(包括\0和空白字符)*每个元素的字节

#include<stdio.h>
int main()
{
  char arr[] = "abc  def";
  printf("%d\n", sizeof(arr));
  return 0;
}//输出9

       由于字符串末尾自动放置‘\0’,中间有三个空格,因此该数组有9个元素。9*1=9

练习:下面代码的结果是:

#include <stdio.h>
int main()
{
    int arr[] = {1,2,(3,4),5};
    printf("%d\n", sizeof(arr));
    return 0;
}

答案:16          因为该数组是一维数组,(3,4)为逗号表达式,表达式从左向右计算,值为最后一个表达式的值,arr[2]=4(数组:https://blog.csdn.net/wait___wait/article/details/135208488

1.3sizeof计算数组元素个数

#include<stdio.h>
int main()
{
  int arr[10] = { 0 };
  int sz = sizeof(arr) / sizeof(arr[0]);//数组大小/每个元素的字节
  printf("%d\n", sz);
  return 0;
}//打印10

二.strlen

       strlen 是一个 C 语言库函数,它返回一个字符串的长度(不包括\0)。头文件为string.h

size_t strlen(const char *str)

  • str  是要计算长度的字符串。
  • size_t是一个无符号整数类型,用于表示字符串的长度。
  • strlen 函数的返回值是字符串的长度,不包括字符串结尾的空字符('\0')。

三. sizeof与strlen的区别

  1.    求数组元素下标    
//求数组元素下标
char arr[]="abcdef";
int right1=strlen(arr)-1;//由于数组下标从0开始,所以求得的字符串长度要减1
int right2=sizeof(arr)/sizeof(arr[0])-2;//sizeof计算'\0'的长度,所以要减2
  1. 求数组大小
char arr1[]="abcdefg";//末尾有\0
char arr2[]={'a', 'b','c','d','e','f','g'};//末尾没有\0
printf("%zd\n", sizeof(arr1));
printf("%zd\n", sizeof(arr2));
printf("%d\n", strlen(arr1));
printf("%d\n", strlen(arr2));//随机值

运行结果:

      由于 strlen从首元素开始计算,遇到‘\0’停止,若无‘\0’,则结果是随机值。

练习:下面代码的结果是:

#include <stdio.h>
int main()
{
    char str[] = "hello bit";
    printf("%d %d\n", sizeof(str), strlen(str));
    return 0;
}

答案:10 9

期待


目录
相关文章
|
9月前
|
消息中间件 人工智能 运维
别让"我觉得"毁了架构:用这条指令让AI做你的技术选型审计员
技术选型往往受限于主观偏见和认知盲区。本文提供了一套“技术选型分析”AI指令,将大模型化身为客观的架构审计员,通过多维度评分和风险评估,帮助开发者从“经验驱动”转向“证据驱动”,做出经得起时间考验的技术决策。
394 5
|
4月前
|
人工智能 供应链 监控
2026年五款主流ChatBI产品推荐,适合电商、制造多场景及分析功能详解
本文深度解析2026年五大主流ChatBI工具(瓴羊Quick BI、SmartBI、Power BI、Qlik Sense、Tableau)在电商与制造行业的适配能力。重点剖析瓴羊Quick BI“智能小Q”五大AI Agent,覆盖自然语言查询、自动解读、报告生成、看板搭建与异常洞察,并提供分规模、分场景的实用选型指南。(239字)
|
机器学习/深度学习 存储 人工智能
Gradio入门到进阶全网最详细教程[一]:快速搭建AI算法可视化部署演示(侧重项目搭建和案例分享)
Gradio入门到进阶全网最详细教程[一]:快速搭建AI算法可视化部署演示(侧重项目搭建和案例分享)
|
JSON 移动开发 缓存
20+个可视化搭建工具,一次玩个够
无论大公司还是小公司,我们开发前端工程时候,项目工程又很多类似的功能或者页面,开发经常是加班加点搬砖去做一些无成长反复操作的工作,看键盘上 ctrle 键已经被磨掉了漆,C 和V 也马上磨白了,那对于开发如何把这些重复的工作用机器去解决?在前端资源紧缺的情况下,是否可直接有工具直接就可以搭建出我想要的前端页面?于是业界的页面可视化搭建工具就出现了,本文会介绍目前最流行的页面可视化搭建工具,也会提供一些开源的可视化搭建项目供大家参考。
3234 0
20+个可视化搭建工具,一次玩个够
|
存储 边缘计算 物联网
RFID技术是如何让仓库实现无人化管理?
RFID技术通过自动识别、实时数据交互和智能调度,实现仓库无人化管理。结合物联网与自动化设备,RFID可完成无人出入库、盘点、分拣与货位管理,提升效率、降低成本,广泛应用于电商、制造、冷链等领域,是智能仓储的核心支撑技术。
|
定位技术 API 数据安全/隐私保护
QWEN-VL Plus 使用小记
近期尝试使用Qwen VL Plus模型处理图像识别任务,以GIS专业背景选择了一张街景图片进行测试。体验上,API调用流畅,环境配置简单,且成本低廉,免费额度可支持约1,000张图片的处理。不过,模型在某些情况下会产生幻觉,如对仅含Google水印的街景图片错误地描述存在地名信息。此外,其文本描述风格多变,从轻松愉快到沉稳不一,有时甚至会拒绝回答。
1175 5
|
测试技术
po+selenium+unittest自动化测试项目实战
po+selenium+unittest自动化测试项目实战
4097 0
 po+selenium+unittest自动化测试项目实战
|
运维 安全 Linux
IDC服务器故障排除思路
本文详细介绍了服务器维修流程,包括维修前的工具和备件准备,以及不拆机情况下的初步检查步骤。文中还提供了拆机维修的具体方法,如最小化测试法、替换法和交叉比较法,并针对CPU、主板、内存、硬盘、电源、风扇、网卡及BMC等主要配件的故障排除进行了说明,强调了注意事项,旨在帮助技术人员快速准确地定位并解决问题。
1328 14
|
存储 自然语言处理 DataWorks
通过云上数据库三步构建RAG系统
本文介绍了如何使用OpenSearch LLM智能问答版通过云上数据库一站式构建RAG系统。
20790 10

热门文章

最新文章