深入sizeof与strlen

一、sizeof与strlen的对比

sizeofstrlen
sizeof是单目操作符strlen是库函数,使用需要包含头文件string.h
sizeof计算操作数所占用的内存,单位是字节strlen是求字符串长度,统计的是\0之前字符的个数
不关注内存中存放什么数据

关注内存总是否有\0,如果没有就会持续

往后找,甚至越界

sizeof不挑类型指针针对字符串

strlen是指针且针对字符串,strlen 原型是size_t strlen(const char *str);

数组名:数组名一般表示数组首元素地址但有两个例外;

1.siziof(数组名):数组名表示整个数组,计算的是整个数组的大小,单位字节。

2.&数组名:数组名表示整个数组,取出的是整个数组的地址。

指针的大小:指针在x86环境下大小为4,在x64环境下为8,单位字节。

int main()
{
    int a[] = { 1, 2, 3, 4 };//arr数组中有四个元素每个元素都是int类型(占四个字节)
    printf("%zd\n", sizeof(a));//sizeof(a)取出的是整个数组的大小16
    printf("%zd\n", sizeof(a+0));//a+0中的a数组名表示数组首元素地址,地址即指针,指针大小4/8
    printf("%zd\n", sizeof(*a));//数组首元素地址解引用,表示数组首元素,4
    printf("%zd\n", sizeof(a+1));//第二个元素的地址,4/8
    printf("%zd\n", sizeof(a[1]));//第二个元素,4
    printf("%zd\n", sizeof(&a));//整个数组的地址,地址即指针4/8
    printf("%zd\n", sizeof(&a + 1));//地址,4/8
    printf("%zd\n", sizeof(&a[0]));//取出数组首元素地址,4/8
    printf("%zd\n", sizeof(&a[0] + 1));//数组第二个元素的地址4/8
    return 0;
}

char arr[] = { 'a','b', 'c', 'd', 'e', 'f' };
printf("%zd\n", sizeof(arr));//整个数组的大小6
printf("%zd\n", sizeof(arr + 0));//指针4/8
printf("%zd\n", sizeof(*arr));//数组首元素,
printf("%zd\n", sizeof(arr + 1));//第二个元素的地址,4/8
printf("%zd\n", sizeof(arr[1]));//第二个元素,1
printf("%zd\n", sizeof(&arr));//整个数组的地址,地址即指针4/8
printf("%zd\n", sizeof(&arr + 1));//地址,4/8
printf("%zd\n", sizeof(&arr[0] + 1));//数组第二个元素的地址4/8


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

    printf("%d\n", strlen(arr));//随机
    printf("%d\n", strlen(arr+0));//随机
    //printf("%d\n", strlen(*arr));//err
    printf("%d\n", strlen(arr+1));//随机
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/505494.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构开篇

目录 一. 如何学好数据结构二. 基本概念和术语2.1 区分数据、数据元素、数据项、数据对象2.2 数据结构2.2.1 逻辑结构2.2.2 存储结构 2.3 数据类型和抽象数据类型2.4 抽象数据类型的实现 \quad 一. 如何学好数据结构 勤于思考;多做练习;多上机;善于寻求帮助;不怕困难&#xff…

基于springboot+vue的计算机课程管理平台(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

python爬虫之selenium知识点记录

selenium 一、前期准备 1、概述 selenium本身是一个自动化测试工具。它可以让python代码调用浏览器。并获取到浏览器中加载的各种资源。 我们可以利用selenium提供的各项功能。 帮助我们完成数据的抓取。 2、学习目标 掌握 selenium发送请求,加载网页的方法 掌…

划分开始结束位置设置标记

划分开始结束位置 初始音轨如下图所示 在想开始地方单击左键,长按直到你想要的结束位置松开。就可以划分开始和结束位置 设置标记 方式1 :直接点击该图标 方式二:使用快捷键M 设置标记点可以自定义名称方便检索标记点

React多个echarts图表在一个页面的使用

前景 很多情况下图标都是一个,我们大概率会像下面代码一样的做法 大概流程就是获取到数据后执行初始化,因为先初始化后异步请求再设置state里面的数据回导致无法正常显示echarts(除非再次调用setOption)下面就记录下自己解决过程源码 https://github.com/superBiuBiuMan/react-…

VMware安装Centos7详细过程

1.硬件软件准备 软件:VMware16 硬件:因为是在宿主机上运行虚拟化软件安装centos,所以对宿主机的配置有一定的要求。最起码I5CPU双核、硬盘500G、内存4G以上。 镜像:centos7,镜像下载地址centos安装包下载_开源镜像站-阿里云 2…

递归回溯剪枝-括号生成

LCR 085. 括号生成 - 力扣(LeetCode) 一. 根据题意,分析出符合要求的括号组合需要满足以下两个条件: 1. 左括号数或者右括号数都不能超过 n; 2. 从最左侧开始的每一个子集,不可以出现右括号数大于左括号数&…

使用python实现一个SCP小工具

源码地址: ssh_scp 工具截图: 一个简易的scp文件上传下载小工具,用来上传或下载一些小文件。 目前只适用于windows, 使用方法: 前提: 工具同级目录,创建一个ssh_commands.json文件。用来存储配…

pikachu验证XXE漏洞

先随便输入一个内容查看 服务器有回显 接下来用bp抓包看下参数 有个xml参数&#xff0c;而且Content-Type: application/x-www-form-urlencoded&#xff0c;我们传入url编码后的xml内容试一下 <?xml version"1.0" encoding"UTF-8"?> <!DOCTYP…

广搜(BFS)

在我们日常刷题的过程中&#xff0c;我们会通过遍历来获取自己想要的数组&#xff0c;搜索算法就是典型的一种。 而搜索算法中也分深搜&#xff08;DFS&#xff09;&#xff0c;广搜&#xff08;BFS&#xff09;,而今天&#xff0c;我们来说说广搜。 什么是广搜 广搜全称叫广…

Stwo:基于Circle STARK和M31的下一代STARK证明系统

1. 引言 StarkWare团队和Polygon Labs团队&#xff0c;历时数月&#xff0c;构造了基于Mersenne素数域M31的Circle STARK协议&#xff0c;通过使用M31 over a circle&#xff0c;可基于任意有限域构造高效STARKs&#xff0c;具体见2024年2月19日论文《Circle STARKs》。 基于…

ES6 | (二)ES6 新特性(下) | 尚硅谷Web前端ES6教程

文章目录 &#x1f4da;迭代器&#x1f407;定义&#x1f407;工作原理&#x1f407;自定义遍历数据 &#x1f4da;生成器函数&#x1f407;声明和调用&#x1f407;生成器函数的参数传递&#x1f407;生成器函数案例 &#x1f4da;Promise&#x1f4da;Set&#x1f407;Set的定…