指针、数组、sizeof、strlen相关知识与练习题目
目录
前提回顾🔍:
关于一维数组🤮:
关于二维数组😀:
sizeof与strlen🐕:
sizeof🏀:
strlen🐓:
相关练习📚:
一维数组与sizeof😔:
字符数组与sizeof🐱:
字符数组与strlen🐟:
指针与sizeof😍:
二维数组与sizeof🎈:
……………等待后续更新!!!!!!!![]()
前提回顾🔍:
关于一维数组🤮:
- 数组名:数组名在通常的情况下是表示数组首个元素的地址
- 数组名+1:表达的是首个元素后的一个地址,也就是第二个元素的地址
- &数组名:表示的是整个数组的地址
- &数组名+1:表示的是从数组首个元素出发,越过1个数组的大小(数组内所有元素的字节数之和)抵达的位置,表达的最后还是地址。
- &数组名[ ] :数组中某个元素的地址
- 数组名[ ] :数组中的第(某个+1) 元素
- *数组名:表达的是首个元素的地址指向的元素,其实就是指首个元素!
- sizeof(数组名):整个数组的大小,也就是整个数组中所有元素的字节数之和!

关于二维数组😀:
举例:a[3][4]
- 数组名:在通常情况下表示的是首个元素的地址,在二维数组中,表示的就是第一行的地址,可以写为a表示第一行的地址,或者写出a[0]表示第一行的地址
- 数组名+1:数组名表示第一行的地址,而+1则表示为二维数组第二行的地址,也可以写为a[1]
- &数组名:表示的是整个数组的地址
- &数组名[ ] :表示的是二维数组中,某一行的地址
- 数组名[ ] :根据二维数组的性质,这其实是二维数组的某一行的数组名
- sizeof(数组名):表示整个二维数组的所有元素的字节之和
- sizeof(数组名[ ]):表示二维数组中的某一行的所有元素字节数之和。
- 数组名[0][0]:表示的是第一行第一个元素
- 数组名[ ] +1 :数组名[ ] 表示的是二维数组某一行的数组名,同时也表示了在这一行中的首个元素地址,而+1则是表示维这一行中的第二个元素的地址

sizeof与strlen🐕:
sizeof🏀:
- sizeof ,sizeof 计算变量所占内存内存空间大小的,单位是字节。
- sizeof 只关注占用内存空间的大小,不在乎内存中存放什么数据。
- 在sizeof中,地址的大小是只根据环境而改变的,x86的环境下,地址的大小是4,x64的环境下,地址的大小是8 单位都是字节
- 在sizeof中,数据、元素的大小是根据数据类型而改变的,列如:int类型四个字节,char类型一个字节。
- 放在sizeof()的括号中的表达式并不会参与运算的!
- sizeof是看类型来进行判断字节大小
- int a = 0;
- printf("%zd\n"sizeof(a));
- printf("%zd\n"sizeof a);
- printf("%zd\n"sizeof(int)); 以上都是允许的,但是不允许printf("%zd\n"sizeof int);

strlen🐓:
- size_t strlen ( const char * str );
- 使用时需要加上头文件,string.h
- strlen是求字符串的长度,且遇见\0会自动停下,所求的长度也是在\0前的字符个数。
- strlen在没有遇到\0的情况下,会一直前进直到找到\0为止。
- 在使用strlen的过程中,要确保被strlen使用的内容中有\0否则会随机返回一个数值。
- strlen()的原理是,括号内给予某个地址,从这个地址开始往后进行查找,查找到\0,结束查找

相关练习📚:
一维数组与sizeof😔:
int a [ ] = {1,2,3,4,5};
printf("%zd\n",sizeof(a)); 16
- a是数组名,sizeof(数组名)是表示整个数组大小,也就是表示整个数组的元素字节之和!
printf("%d\n",sizeof(a+0));4/8
- a+0在sizeof里面,并不是单纯的数组名,所以a只能是表示首元素地址,首元素地址+0还是首元素地址!4或8个字节是看环境
printf("%d\n",sizeof(*a));
- *a在sizeof里面并不是单纯的数组名,所以a表示的是首元素地址,*是解引用,*a就是表示第一个元素!是元素!int类型的元素是4个字节!
printf("%d\n",sizeof(a+1));
- a+1在sizeof中并不是单纯的数组名,所以a表示的是首元素地址,a+1就表示首元素地址+1,那就是第二个元素地址。所以是4或8个字节
printf("%d\n",sizeof(a[1]));
- 就是第二个元素!求第二个元素的字节大小!
printf("%d\n",sizeof(&a));
- &a取出的是整个数组的地址,数组的地址也是地址,地址的大小就是4或8,其次&a是为了&a其实是表现在&a+1时类型的不同,而体现的+1效果不同,整型的a那就是加上了4个字节,而char的a那就是加上1个字节
printf("%d\n",sizeof(*&a));
- &a是取了整个数组的地址,并把整个地址存放到p,*又是解引用
- *p则是访问p里面的地址所指向的元素
- p是数组的地址,相当于访问了数组里面的所有元素。
- 所以sizeof(*&a)相当于访问了数组里面所以的元素大小,那就等于取了数组中所有元素的大小,那就是16
printf("%d\n",sizeof(&a+1));
- &a是表示整个数组的地址,&a+1就是在整个数组地址上在往后四个字节的地址(看a的类型,如果a是char那就是在整个数组的地址上往后一个字节),也是地址,所有就是4或8个字节
printf("%d\n",sizeof(&a[0]));
- a[0] 表示的是首元素,而&a[0]则表示的是首元素的地址 ,因为是地址所有4/8
printf("%d\n",sizeof(&a[0]+1));
- a[0] 表示的是首元素,而&a[0]则表示的是首元素的地址 ,&a[0]+1表示首元素的地址+1那么就是第二个元素的地址,因为是地址所有是4/8

字符数组与sizeof🐱:
char arr[] = {'a','b','c','d','e'};
printf("%d\n", sizeof(arr));
- arr是数组名,sizeof(数组名)是表示整个数组大小,也就是表示整个数组的元素字节之和!
printf("%d\n", sizeof(arr+0));
- arr是数组首元素的地址,arr+0 还是首元素的地址 是地址大小就是4/8个字节
printf("%d\n", sizeof(*arr));
- arr是数组首元素的地址,*arr就是首元素,就占一个字符大小就是1个字节
printf("%d\n", sizeof(arr[1]));
- arr[1]就是数组的第二个元素,大小是1个字节
printf("%d\n", sizeof(&arr));
- &arr 是数组的地址,数组的地址也是地址,大小就是4/8
printf("%d\n", sizeof(&arr+1));
- &arr+1 是跳过整个数组,指向e的后面
printf("%d\n", sizeof(&arr[0]+1));
- &arr[o]是首元素的地址,&arr[o]+1就是第二个元素的地址

字符数组与strlen🐟:
char arr[ ] = {'a','b','c','d','e'};
printf("%d\n", strlen(arr));
printf("%d\n", strlen(arr+0));
- 这两个都一样,因为不是sizeof所以arr表示的是首元素地址
- arr+0和arr都是表示首元素地址
printf("%d\n", strlen(*arr));
printf("%d\n", strlen(arr[1]));
- arr是首元素地址,*表示地址指向的元素,*arr就是首元素 ’a‘ 而’a‘的ASCII值是97
- 但是97作为地址传给strlen会造成非法访问!
- arr[1] 也是如此,表示的是元素‘b’
printf("%d\n", strlen(&arr));
- 虽然&arr是整个数组的地址,但也是从首元素地址开始的,抵达\0处,但是上面没有\0所以随机值
printf("%d\n", strlen(&arr+1));
- 因为是&arr+1,所以是在数组后面的一个地址开始寻找\0,但因为没有表明\0所以是随机值,且和&arr差6
printf("%d\n", strlen(&arr[0]+1));
- 表示的是第二个元素的地址,也是从第二个地址开始找\0但是找不到,所以随机值

指针与sizeof😍:
char *p = "abcdef";
printf("%d\n", sizeof(p));
- p是一个指针变量,根据指针变量的根本特性,所有的指针变量的大小都是四或八个字节
printf("%d\n", sizeof(p+1));
- p存储的是a的地址,也是首字符地址,+1后就是第二个字符地址
printf("%d\n", sizeof(*p));
- p是首字符地址,*是表示地址指向的元素,*p就是首字符
printf("%d\n", sizeof(p[0]));
- 其实就是字符串的首个字符,相当于数组arr的arr[0]
printf("%d\n", sizeof(&p));
- &p是指针p的地址,既然是地址那么大小就是四或八个字节
printf("%d\n", sizeof(&p+1));
- &p是地址,而&p+1则是跳过一个p大小的地址,本质上还是地址,&p+1只是为了直到跳过几个p大小,以及跳过的字节数是多少。
printf("%d\n", sizeof(&p[0]+1));
- p[0]是表示字符串的首字符,&p[0]则是取首字符地址,随后的加一变成了第二个字符的地址,既然是地址,那么就是四个或八个字节

二维数组与sizeof🎈:
int a[3][4] = {0};
printf("%d\n",sizeof(a));
- 计算的是整个二维数组的大小,单位是字节-48
printf("%d\n",sizeof(a[0][0]));
- a[0][0]是第一行第一个元素,大小是4个字节
printf("%d\n",sizeof(a[0]));
- a[0]其实就是第一行的数组名,这里第一行的数组名单独放在sizeof内部了,计算的是第一行的大小 —16
printf("%d\n",sizeof(a[0]+1));
- a[0]是第一行这个数组的数组名,但是数组名并非单独放在sizeof内部,所以数组名表示数组首元素的地址,也就是a[0[0]的地址。
- a[0]+1是第一行第二个元素 (a[0][1]) 的地址,地址的大小是4/8个字节
printf("%d\n",sizeof(*(a[0]+1)));
- a[ 0 ] + 1是第一行第二个元素 (a[ 0 ][1]) 的地址,*(a[0] + 1)就是第一行第二个元素,大小是4个字节
printf("%d\n",sizeof(a+1));
- a 没有单独放在sizeof内部,没有&,数组名a就是数组首元素的地址,也就是第一行的地址,a+1就是第二行的地址
printf("%d\n",sizeof(*(a+1)));
- (a+1)在siezeof中并不是单独的数组名,所以a代表首元素地址,而二维数组的首元素地址表示的是第一行地址,所以第一行地址加一就是第二行地址。
- 而*就是解引用,指向地址指向的元素,所以*(a+1)就是指向第二行中的所有元素。
- 所以就是求第二行的所有元素的字节大小之和,也就是16。
- 其次*(a+1)可以表示为a[1]相当于第二行的数组名,表示第二行数组地址
printf("%d\n",sizeof(&a[0]+1));
- a[0]是第一行的数组名,&a[0]取出的是第一行的地址,&a[0]+1得到的就是第二行的地址
printf("%d\n",sizeof(*(&a[0]+1)));
- (&a[0]+1)表示的是第二行地址,那么解引用就表示第二行地址指向的元素,也就是第二行的所有元素的字节大小之和
printf("%d\n",sizeof(*a));
- 二维数组的数组名就是a,而sizeof里面并不单单是数组名,所有这里的a表示二维数组的首地址,二维数组的首地址是第一行的地址。
- 而*解引用就是指向地址指向的元素,因此指向第一行的所有元素,所以这里最后求的就是第一行中所有元素的字节数之和
printf("%d\n",sizeof(a[3]));
- 表示的是数组第四行的地址,但是数组并没有四行,可是sizeof的特性就是看只看空间不看数据,所以他不会在一数据是否存在,只会看数据的类型来判断空间大小.
- 而a[3]相当于一个数组名,所有根据先前的设定(a[3][4]),我们可以直到a[3]的大小相当于a[0]的大小,也就相当于第一行所有字节数之和的大小,也就是16
……………等待后续更新!!!!!!!
相关文章:
指针、数组、sizeof、strlen相关知识与练习题目
目录 前提回顾🔍: 关于一维数组🤮: 关于二维数组😀: sizeof与strlen🐕: sizeof🏀: strlen🐓: 相关练习📚:…...
分类预测 | MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测
分类预测 | MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测 目录 分类预测 | MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现WOA-CNN-BiLSTM-Attention数据分类预测,运行环境Matlab2023b及以上…...
MyBatis动态SQL:打造灵活可变的数据库操作
目录 if标签trim标签where标签set标签foreach标签 动态SQL就是根据不同的条件或需求动态地生成查询语句,比如动态搜索条件、动态表或列名、动态排序等。 if标签 在我们填写一些信息时,有些信息是必填字段,有的则是非必填的,这些…...
nginx代理请求到内网不同服务器
需求:之前用的是frp做的内网穿透,但是每次电脑断电重启,路由或者端口会冲突,现在使用汉土云盒替换frp。 需要把公网ip映射到任意一台内网服务器上,然后在这台内网服务器上用Nginx做代理即可访问内网其它服务器…...
【C# 基础精讲】文件读取和写入
文件读取和写入是计算机程序中常见的操作,用于从文件中读取数据或将数据写入文件。在C#中,使用System.IO命名空间中的类来进行文件读写操作。本文将详细介绍如何在C#中进行文件读取和写入,包括读取文本文件、写入文本文件、读取二进制文件和写…...
设计模式——经典单例
0、核心要素 // 构造、析构函数私有化(一个进程只允许一个对象存在) // 对象私有化、静态化(因为接口静态函数) // 对象调用接口静态化(因为静态函数脱离了类对象,可以直接调用) 一、懒汉 唯…...
【HarmonyOS】鸿蒙应用获取华为帐号手机号码步骤(API7及以下)
【写在前面】 本文主要介绍使用API7及以下版本开发HarmonyOS应用时,通过华为帐号SDK和云侧接口获取手机号码的主要开发步骤,注意:开发过程中集成的华为帐号SDK仅支持API7及以下版本的HarmonyOS应用。 【前提准备】 1、HarmonyOS应用已申请获…...
webpack相关面试
运行 npm run xxx 的时候发生了什么? npm run xxx的时候,首先会去项目的package.json文件里找scripts 里找对应的xxx,然后执行 xxx的命令 npm i 的时候,npm 读到该配置后,就将该文件软链接到 ./node_modules/.bin 目录…...
如何使用ChatGPT创建个性化的健身锻炼计划
ChatGPT广泛应用于各个行业,健身也不例外。 ChatGPT 在健身领域的一个常用案例是创建个性化的锻炼计划。 在要求 ChatGPT 创建锻炼计划时,简单地输入自己的目标和当前的健身水平是一个很好的开始。完成此操作后,你还可以使用其他提示和措施来…...
人工智能与云计算实训室建设方案
一、 人工智能与云计算系统概述 人工智能(Artificial Intelligence,简称AI)是一种模拟人类智能的科学和工程,通过使用计算机系统来模拟、扩展和增强人类的智能能力。人工智能涉及多个领域,包括机器学习、深度学习、自然…...
使用 Apache Kafka 和 Go 将数据引入 OpenSearch
需要编写自定义集成层来满足数据管道中的特定要求?了解如何使用 Go 通过 Kafka 和 OpenSearch 实现此目的。 可扩展的数据摄取是OpenSearch等大规模分布式搜索和分析引擎的一个关键方面。构建实时数据摄取管道的方法之一是使用Apache Kafka。它是一个开源事件流平台…...
2.SpringMvc中Model、ModelMap和ModelAndView使用详解
1.前言 最近SSM框架开发web项目,用得比较火热。spring-MVC肯定用过,在请求处理方法可出现和返回的参数类型中,最重要就是Model和ModelAndView了,对于MVC框架,控制器Controller执行业务逻辑,用于产生模型数据…...
Spark repartition和coalesce的区别
repartition只是coalesce接口中shuffle为true的实现。不经过 shuffle,也就是coaleasce shuffle为false,是无法增加RDD的分区数的,比如你源RDD 100个分区,想要变成200个分区,只能使用repartition,也就是coal…...
微服务最佳实践,零改造实现 Spring Cloud Apache Dubbo 互通
作者:孙彩荣 很遗憾,这不是一篇关于中间件理论或原理讲解的文章,没有高深晦涩的工作原理分析,文后也没有令人惊叹的工程数字统计。本文以实际项目和代码为示例,一步一步演示如何以最低成本实现 Apache Dubbo 体系与 S…...
leetcode 力扣刷题 两数/三数/四数之和 哈希表和双指针解题
两数/三数/四数之和 题目合集 哈希表求解1. 两数之和454. 四数相加Ⅱ 双指针求解15.三数之和18. 四数之和 这个博客是关于:找出数组中几个元素,使其之和等于题意给出的target 这一类题目的,但是各个题之间又有些差异,使得需要用不…...
(搜索) 剑指 Offer 12. 矩阵中的路径 ——【Leetcode每日一题】
❓剑指 Offer 12. 矩阵中的路径 难度:中等 给定一个 m * n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构…...
构建高可用的去中心化微服务集群架构指南
随着云计算、大数据和物联网的快速发展,企业对于可扩展的、高性能的微服务架构的需求也日益增长。传统的集中式架构已经不能满足这些需求,因此出现了去中心化的微服务集群架构。本文将介绍如何构建高可用的去中心化微服务集群架构,以满足企业…...
Sui主网升级至V1.7.1版本
Sui主网现已升级至V1.7.1版本,此升级包含了多项修复和优化。升级要点如下所示: #12915 协议版本提升至20版本。 在Sui框架中新增Kiosk Extensions API和一个新的sui::kiosk_extension模块。 您可以使用该API构建自定义的Kiosk应用程序,以…...
自然语言处理从入门到应用——LangChain:索引(Indexes)-[基础知识]
分类目录:《自然语言处理从入门到应用》总目录 索引(Indexes)是指为了使LLM与文档更好地进行交互而对其进行结构化的方式。在链中,索引最常用于“检索”步骤中,该步骤指的是根据用户的查询返回最相关的文档:…...
k8s集群监控方案--node-exporter+prometheus+grafana
目录 前置条件 一、下载yaml文件 二、部署yaml各个组件 2.1 node-exporter.yaml 2.2 Prometheus 2.3 grafana 2.4访问测试 三、grafana初始化 3.1加载数据源 3.2导入模板 四、helm方式部署 前置条件 安装好k8s集群(几个节点都可以,本人为了方便实验k8s集…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
淘宝扭蛋机小程序系统开发:打造互动性强的购物平台
淘宝扭蛋机小程序系统的开发,旨在打造一个互动性强的购物平台,让用户在购物的同时,能够享受到更多的乐趣和惊喜。 淘宝扭蛋机小程序系统拥有丰富的互动功能。用户可以通过虚拟摇杆操作扭蛋机,实现旋转、抽拉等动作,增…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
