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

「2」指针进阶,最详细指针和数组难题解题思路

 

🐶博主主页:@ᰔᩚ. 一怀明月ꦿ 

❤️‍🔥专栏系列:线性代数,C初学者入门训练

🔥座右铭:“不要等到什么都没有了,才下定决心去做”

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀 ​​​​​​​

本篇文章,为了提高效率,也为了大家学起来更加方便,我是使用C++的处理方法,如果大家,还没有学习C++,也为大家提供C语言的版本<指针与数组>。

其实我发现指针与数组的难题主要是,二维数组和指针的问题,如果大家理解起来有些困难,主要是大家没有弄懂二维数组的实质,建议大家可以看一下,

大佬总结的二维数组超强解析,看完之后觉对这些题了如指掌!!!

目录

🏡回顾

🐰一维数组

❤️‍🔥指针与整形型数组

❤️‍🔥指针与字符型数组

🐰二维数组


 

🏡回顾

数组-能够存放一组相同类型的元素。

指针-指针变量

数组是数组,指针就是指针的

数组名就是首元素地址

数组名大部分情况下就是首元素地址

sizaof(数组名),表示整个数组,计算的整个数组的大小

&数组名,取出的是整个数组的地址

🐰一维数组

❤️‍🔥指针与整形型数组

#include<iostream>using namespace std;int main(){int a[]={1,2,3,4};cout<<sizeof(a)<<endl;//16//sizaof(数组名),表示整个数组,计算的整个数组的大小cout<<sizeof(a+0)<<endl;//4/8//表示计算首元素地址的大小cout<<sizeof(*a)<<endl;//4//a还是首元素的地址,*a就是a[0]cout<<sizeof(a+1)<<endl;//4/8//表示计算第二个元素地址的大小cout<<sizeof(a[1])<<endl;//4cout<<sizeof(&a)<<endl;//4/8//&a-整个数组的地址//int (*p)[4]=&a;cout<<sizeof(*&a)<<endl;//16//相当于sizeof(a)cout<<sizeof(&a+1)<<endl;//16//&a+1跳过一个数组//&a+1还是一个地址cout<<sizeof(&a[0])<<endl;//4/8cout<<sizeof(&a[0]+1)<<endl;//4/8return 0;}

❤️‍🔥指针与字符型数组

#include<iostream>#include<string.h>using namespace std;int main(){char arr[]={'a','b','c','d','e','f'};cout<<sizeof(arr)<<endl;//6//sizeof计算的内存的大小,单位是字节,不关注内存里放的是什么//sizeof是操作符//strlen是函数,是针对字符串,求字符串的长度,本质计算\0之前的字符cout<<sizeof(arr+0)<<endl;//4/8//arr+0是首元素的地址cout<<sizeof(*arr)<<endl;//1//*arr是首元素,'a'cout<<sizeof(arr[1])<<endl;//计算第二个元素的大小cout<<sizeof(&arr)<<endl;//4/8//整个数组的地址cout<<sizeof(&arr+1)<<endl;//4/8//跳过一个数组的地址cout<<sizeof(&arr[0]+1)<<endl;//4/8//第二个元素的地址cout<<strlen(arr)<<endl;//随机值,不知道亲\0的位置cout<<strlen(arr+0)<<endl;//随机值,不知道亲\0的位置//cout<<strlen(*arr)<<endl;//错误//strlen的原型为size_t strlen ( const char * str );,应该传入地址//cout<<strlen(arr[1])<<endl;//错误,和上面的错误原因相同//cout<<strlen(&arr)<<endl;//随机值cout<<strlen(&arr+1)<<endl;//随机值cout<<strlen(&arr[0]+1)<<endl;//随机值return 0;}
#include<iostream>#include<string.h>using namespace std;int main(){char arr[]="abcdef";cout<<sizeof(arr)<<endl;//7//里面还有一个‘\0’cout<<sizeof(arr+0)<<endl;//4/8//arr+0是首元素的地址cout<<sizeof(*arr)<<endl;//1//*arr是首元素,'a'cout<<sizeof(arr[1])<<endl;//1//计算第二个元素的大小cout<<sizeof(&arr)<<endl;//4/8//整个数组的地址cout<<sizeof(&arr+1)<<endl;//4/8//跳过一个数组的地址cout<<sizeof(&arr[0]+1)<<endl;//4/8//第二个元素的地址cout<<strlen(arr)<<endl;//6//不计算'\0'cout<<strlen(arr+0)<<endl;//6//cout<<strlen(*arr)<<endl;//错误//strlen的原型为size_t strlen ( const char * str );,应该传入地址//cout<<strlen(arr[1])<<endl;//错误,和上面的错误原因相同//cout<<strlen(&arr)<<endl;//6//cout<<strlen(&arr+1)<<endl;//随机值cout<<strlen(&arr[0]+1)<<endl;//5 return 0;}
#include<iostream>#include<string.h>using namespace std;int main(){char* p="abcdef";cout<<sizeof(p)<<endl;//4/8cout<<sizeof(p+1)<<endl;//4/8//第二个元素的地址cout<<sizeof(*p)<<endl;//1cout<<sizeof(p[0])<<endl;//1cout<<sizeof(&p)<<endl;//4/8cout<<sizeof(&p+1)<<endl;//4/8cout<<sizeof(&p[0])<<endl;//4/8cout<<sizeof(&p[0]+1)<<endl;//4/8//第二个元素的地址cout<<strlen(p)<<endl;//6cout<<strlen(p+1)<<endl;//5//cout<<strlen(*p)<<endl;//错误//cout<<strlen(p[0])<<endl;//错误//cout<<strlen(&p)<<endl;//随机值//cout<<strlen(&p+1)<<endl;//随机值//strlen(&p)和strlen(&p+1)没有关系cout<<strlen(&p[0]+1)<<endl;//5return 0;}

🐰二维数组

#include<iostream>using namespace std;int main(){int a[3][4]={0};cout<<sizeof(a)<<endl;//48//二维数组的数组命名单独放在sizeof内部,算的是整个数组的大小cout<<sizeof(a[0][0])<<endl;//4cout<<sizeof(a[0])<<endl;//16//第一行的数组名,计算的数组的大小cout<<sizeof(a[0]+1)<<endl;//4/8//第一行的第二个元素的地址 &a[0][0]+1cout<<sizeof(*(a[0]+1))<<endl;//4//第一行的第二个元素 *(&a[0][0]+1)=a[0][1]cout<<sizeof(a+1)<<endl;//8//a=&a[0]//a[i]=&a[i][0]//a+1就是第二行的地址 &a[0]+1=&a[1]cout<<sizeof(*(a+1))<<endl;//16//*(&a[0]+1)=*(&a[1])=a[1]cout<<sizeof(&a[0]+1)<<endl;//4/8cout<<sizeof(*(&a[0]+1))<<endl;//16//a[1]拿到第二行的元素cout<<sizeof(*a)<<endl;//16
//*a=a[1],a[1]是第二行的首元素,sizeof(a[1])算的是第二行整个的大小cout<<sizeof(*a+1)<<endl;//4/8//a[0]+1//&a[0][0]+1=&a[0][1]cout<<sizeof(a[3])<<endl;//16
//计算的类型的大小,sizeof是在预处理的时候,就完成计算了,所以在编译的时候,不会计算,预处理的时候,计算a[3]就相当于计算a[i]的类型大小return 0;}

 🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸 

相关文章:

「2」指针进阶,最详细指针和数组难题解题思路

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练 &#x1f525;座右铭&#xff1a;“不要等到什么都没有了&#xff0c;才下定决心去做” &#x1f680;&#x1f680;&#x1f680;大家觉不错…...

云服务器是做什么的?云服务器典型的应用场景介绍

云服务器可能是很多企业以及个人上云用户的必选产品了&#xff0c;但是对于初学者或者非专业的用户来说云服务器还是比较陌生的&#xff0c;它到底是干什么的&#xff0c;如此生活中哪些地方可以接触到&#xff0c;这篇文章将详细的介绍云服务器使用的应用场景以及相关的操作 本…...

【论文随笔】Transfer of temporal logic formulas in reinforcement learning

Zhe Xu and Ufuk Topcu. 2019. Transfer of temporal logic formulas in reinforcement learning. In Proceedings of the 28th International Joint Conference on Artificial Intelligence (IJCAI’19). AAAI Press, 4010–4018. 这是一篇将inference和learning结合起来的文章…...

蓝桥杯-货物摆放

蓝桥杯-货物摆放1、题目描述1.1 答案提交1.2 运行限制2、解决方案2.1 方案一&#xff1a;暴力解法(三重循环)2.2 方案二&#xff1a;找出乘机的因子1、题目描述 小蓝有一个超大的仓库&#xff0c;可以摆放很多货物。 现在&#xff0c;小蓝有 n 箱货物要摆放在仓库&#xff0c;每…...

10 种顶流聚类算法 Python 实现(附完整代码)

聚类或聚类分析是无监督学习问题。它通常被用作数据分析技术&#xff0c;用于发现数据中的有趣模式&#xff0c;例如基于其行为的客户群。 有许多聚类算法可供选择&#xff0c;对于所有情况&#xff0c;没有单一的最佳聚类算法。相反&#xff0c;最好探索一系列聚类算法以及每…...

微信小程序第一节 —— 自定义顶部、底部导航栏以及获取胶囊体位置信息。

一、前言 大家好&#xff01;我是 是江迪呀。我们在进行微信小程序开发时&#xff0c;常常需要自定义一些东西&#xff0c;比如自定义顶部导航、自定义底部导航等等。那么知道这些自定义内容的具体位置、以及如何适配不同的机型就变得尤为重要。下面让我以在iPhone机型&#x…...

快速吃透π型滤波电路-LC-RC滤波器

π型滤波器简介 π型滤波器包括两个电容器和一个电感器&#xff0c;它的输入和输出都呈低阻抗。π型滤波有RC和LC两种&#xff0c; 在输出电流不大的情况下用RC&#xff0c;R的取值不能太大&#xff0c;一般几个至几十欧姆&#xff0c;其优点是成本低。其缺点是电阻要消耗一些…...

聊聊混沌工程

这是鼎叔的第五十四篇原创文章。行业大牛和刚毕业的小白&#xff0c;都可以进来聊聊。欢迎关注本专栏和微信公众号《敏捷测试转型》&#xff0c;大量原创思考文章陆续推出。混沌工程是一门新兴学科&#xff0c;它不仅仅只是个技术活动&#xff0c;还包含如何设计能够持续协作的…...

做为骨干网络的分类模型的预训代码安装配置简单记录

一、安装配置环境 1、准备工作 代码地址 GitHub - bubbliiiing/classification-pytorch: 这是各个主干网络分类模型的源码&#xff0c;可以用于训练自己的分类模型。 # 创建环境 conda create -n ptorch1_2_0 python3.6 # 然后启动 conda install pytorch1.2.0 torchvision…...

网络协议(九):应用层(域名、DNS、DHCP)

网络协议系列文章 网络协议(一)&#xff1a;基本概念、计算机之间的连接方式 网络协议(二)&#xff1a;MAC地址、IP地址、子网掩码、子网和超网 网络协议(三)&#xff1a;路由器原理及数据包传输过程 网络协议(四)&#xff1a;网络分类、ISP、上网方式、公网私网、NAT 网络…...

有趣的小知识(三)提升网站速度的秘诀:掌握缓存基础,让你的网站秒开

像MySql等传统的关系型数据库已经不能适用于所有的业务场景&#xff0c;比如电商系统的秒杀场景&#xff0c;APP首页的访问流量高峰场景&#xff0c;很容易造成关系型数据库的瘫痪&#xff0c;随着缓存技术的出现很好的解决了这个问题。 一、缓存的概念&#xff08;什么是缓存…...

SpringCloud之服务拆分和实现远程调用案例

服务拆分对单体架构项目来说&#xff1a;简单方便&#xff0c;高度耦合&#xff0c;扩展性差&#xff0c;适合小型项目。而对于分布式架构来说&#xff1a;低耦合&#xff0c;扩展性好&#xff0c;但架构复杂&#xff0c;难度大。微服务就是一种良好的分布式架构方案&#xff1…...

mybatis: Invalid bound statement (not found): com.atguigu.dao.UserDao.save

问题描述&#xff1a; 1 问题实质: dao层(又叫mapper接口)跟mapper.xml文件没有映射 2 问题原因: 出现这种映射问题的原因分为低级原因和更低级原因两种 更低级原因: (1)dao层的方法和mapper.xml中的方法不一样; (2)mapper中的namespace 值 和对应的dao层entity层不一致 &…...

JavaScript 代码规范

所有的 JavaScript 项目适用同一种规范。JavaScript 代码规范代码规范通常包括以下几个方面:变量和函数的命名规则空格&#xff0c;缩进&#xff0c;注释的使用规则。其他常用规范……规范的代码可以更易于阅读与维护。代码规范一般在开发前规定&#xff0c;可以跟你的团队成员…...

6综合项目 旅游网 【6.我的收藏和收藏排行榜】

我的收藏分析先登录→拿到当前登录的用户信息&#xff0c;从数据库中获取uid和对应uid的rid集合→将rid集合信息展示到我的收藏前台代码判断用户是否登录&#xff0c;传递uid&#xff0c;通过uid查找其对应的rid集合当查询的属性涉及到多张表&#xff0c;则必须使用多表连接&am…...

openpnp - error - 微调mark点坐标后,更新板子其他原件其他坐标报错的变通方法

文章目录openpnp - error - 微调mark点坐标后,更新板子其他原件其他坐标报错的变通方法概述想出来一个变通的方法ENDopenpnp - error - 微调mark点坐标后,更新板子其他原件其他坐标报错的变通方法 概述 载入坐标文件后, 指定左下角远点坐标, 然后定位板子上的3个Mark点, 因为…...

借助ChatGPT爆火,股价暴涨又暴跌后,C3.ai仍面临巨大风险

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 C3.ai的股价 作为一家人工智能技术提供商&#xff0c;C3.ai&#xff08;AI&#xff09;的股价曾在2021年初随着炒作情绪的增加&#xff0c;达到了历史最高点&#xff0c;但自那以后其股价就下跌了90%&#xff0c;而且炒作情…...

蓝桥杯-数位排序

蓝桥杯-数位排序1、问题描述2、解题思路3、代码实现1、问题描述 小蓝对一个数的数位之和很感兴趣, 今天他要按照数位之和给数排序。当 两个数各个数位之和不同时, 将数位和较小的排在前面, 当数位之和相等时, 将数值小的排在前面。 例如, 2022 排在 409 前面, 因为 2022 的数位…...

【ES实战】ES 插件包离线安装(本地文件)

ES 插件包离线安装&#xff08;本地文件&#xff09; 文章目录ES 插件包离线安装&#xff08;本地文件&#xff09;使用安装命令安装直接解压式验证安装情况常用的分词插件analysis-ik analysis-pinyin analysis-dynamic-synonym 在集群的节点上分发插件的ZIP安装包 使用安…...

Spring的核心基础——IOC与DI

文章目录一、Spring简介1 Spring介绍1.1 为什么要学1.2 学什么2 初识Spring2.1 Spring家族2.2 Spring发展史3 Spring体系结构3.1 Spring Framework系统架构图4 Spring核心概念问题导入4.1 核心概念二、IOC和DI入门1 IOC入门问题导入1.1 门案例思路分析1.2 实现步骤1.3 实现代码…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...