当前位置: 首页 > news >正文

c语言中“sizeof”和“strlen”的区别

sizeof:

    是操作符,不是函数

    计算变量所占的内存空间的大小,单位是字节,如果是类型的话,计算的是使用类型创建所占空间的大小。

    只关注内存空间,不管什么类型。

strlen:

       是函数库函数):求字符串的长度,只能针对字符串(字符数组)

       统计字符串中“\0"前的字符个数。关注是否有“\0”,如果没有,会持续往后找,可能会越界

例题:

int main(){

    char arr1[]={'a','b','c'};

char arr2[]="a b c";          //末尾有隐藏的\0

printf("%zd\n",strlen(arr1));      //随机值,因为找不到\0会一直往下找,会出现随机值。

printf("%zd\n",strlen(arr2));      // 3

printf("%zd\n",sizeof(arr2));     // 3

printf("%zd\n",sizeof(arr2));     // 4

数组和指针:

整型数组:

数组名是首元素地址,除了“sizeof(数组名)”和“&(数组名)

int main(){

int a[]={1,2,3,4};

pritnf("%zd\n",sizeof(a));        //16  因为数组名a单独在sizeof的内部,a表示整个数组

pritnf("%zd\n",sizeof(a+0));    //4或者8   数组名+0还是首元素地址,看是X64,还是X86.

pritnf("%zd\n",sizeof(*a));       //4          a表示首元素地址,但是*a就是首元素a[0]。

pritnf("%zd\n",sizeof(a+1));    //4或者8    首元素地址+1,表示a[1].

pritnf("%zd\n",sizeof(a[1]));    //4              就是表示元素a[1]。

pritnf("%zd\n",sizeof(&a));      //4或者8.    &a--整个数组地址,只要是地址就是4或者8.

pritnf("%zd\n",sizeof(*&a));    //16             其中的*和&相互低消了,就是访问的整个数组a

pritnf("%zd\n",sizeof(&a+1));  //4或者8.     &a+1--就是表示跳过整个数组后那个位置的地址。

pritnf("%zd\n",sizeof(&a[0]));  //4或者8.      

pritnf("%zd\n",sizeof(&a[0]+1));//4或者8.    首元素+1就是第二个元素的地址。

以上有关只要是地址就是4或者8 的可以去看7月 30号“c语言中的指针变量大小,以及指针类型的意义”文章里面有介绍。

字符数组

int main(){

char arr[]={'a','b','c','d','e','f'};

printf(%d\n",sizeof(arr));          //6             数组单独放在sizeof里面表示整个数组

printf(%d\n",sizeof(arr+0));      //4或者8    数组名表示首元素地址

printf(%d\n",sizeof(*arr));         //1              arr表示首元素地址,*arr就是首元素

printf(%d\n",sizeof(&arr));        //4或者8     &(数组)是整个数组

printf(%d\n",sizeof(&arr+1));    //4或者8      表示跳过整个数组后的位置的地址

printf(%d\n",sizeof(&arr[0]+1));//4或者8     

printf(%d\n",sizeof(arr));           //随机值     若是没有发现‘\0’就会继续往下找。

printf(%zd\n",strlen(arr+0));      //随机值

printf(%zd\n",strlen(*arr));        //‘a’--97直接系统崩了,传给strlen,会以为97是地址,就去访问

printf(%zd\n",strlen(arr[1]));      //同上

printf(%zd\n",strlen(&arr));        //随机值    取数组的地址

printf(%zd\n",strlen(&arr+1));    //随机值

printf(%zd\n",strlen(&arr[0]+1)); //随机值

return 0;

}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • linux atomic 原子变量操作
  • 【数列求值 / B】
  • Parallels Desktop 20(Mac虚拟机) v20.0.0 for Mac 最新破解版(支持M系列)
  • 【tomcat】tomcat学习笔记
  • 阿里云 Quick BI使用介绍
  • 基于SAM大模型的遥感影像分割工具,用于创建交互式标注、识别地物的能力,可利用Flask进行封装作为Web后台服务
  • 利用H5无插件播放RTSP流的实现方案
  • 【二等奖论文】2024年华为杯研究生数学建模F题成品论文(后续会更新)
  • 搜维尔科技:Unity中的A.R.T.测量工具
  • Spring Cloud Alibaba-(4)Sentinel【流控和降级】
  • C# 入坑JAVA 潜规则 大小写敏感文件名和类名 枚举等 入门系列2
  • 策略模式在 Spring Boot 框架中的应用
  • 实验3 Hadoop集群运行环境搭建和使用
  • 创建索引遇到这个Bug,19c中还没有修复
  • 粒子向上持续瀑布动画效果(直接粘贴到记事本改html即可)
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • CSS相对定位
  • ECS应用管理最佳实践
  • ESLint简单操作
  • Java|序列化异常StreamCorruptedException的解决方法
  • Javascript基础之Array数组API
  • js ES6 求数组的交集,并集,还有差集
  • Laravel核心解读--Facades
  • Promise初体验
  • Python学习之路16-使用API
  • Python语法速览与机器学习开发环境搭建
  • 从伪并行的 Python 多线程说起
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 对象引论
  • 番外篇1:在Windows环境下安装JDK
  • 飞驰在Mesos的涡轮引擎上
  • 复习Javascript专题(四):js中的深浅拷贝
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 工作手记之html2canvas使用概述
  • 坑!为什么View.startAnimation不起作用?
  • 前端工程化(Gulp、Webpack)-webpack
  • 事件委托的小应用
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​数据结构之初始二叉树(3)
  • #微信小程序(布局、渲染层基础知识)
  • #微信小程序:微信小程序常见的配置传值
  • (09)Hive——CTE 公共表达式
  • (1)bark-ml
  • (19)夹钳(用于送货)
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (二)丶RabbitMQ的六大核心
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (附源码)springboot电竞专题网站 毕业设计 641314
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (六)Hibernate的二级缓存
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置