c语言:初识指针(二)

news2024/11/23 8:11:54

初识指针

  • 一.野指针
    • 1.野指针形成原因一是:未初始化
    • 2.野指针形成原因二:指针越界
    • 3.野指针形成原因三:指针所指向的内存空间被释放
  • 二.指针的运算
    • 1.指针+-整数运算
    • 2.指针-指针
    • 3.指针的关系运算
  • 三.指针和数组
  • 四.二级指针
  • 五.指针数组
    • 1.定义
    • 2.用一维数组来模拟二维数组

在这里插入图片描述

一.野指针

野指针就是指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)

1.野指针形成原因一是:未初始化

在这里插入图片描述

当我这样写时,p是一个局部变量,没有初始化,那么p内就是一个随机值,那么编译器就会把这个随机值看作地址(某个内存单元编号),那么你解引用P,编译器就会找到这一个地址所对应的内存单元,将里面的数据变为20,但这种操作是很危险的,因为你根本不知道这个20存到了哪,你就无法找到它,相当于就白存了

在这里插入图片描述
在这里插入图片描述

像这种将a的地址存到p内,我们就可以准确找到这个地址所对应的内存单元,从而找到并使用这个内存单元内存的数据

2.野指针形成原因二:指针越界

在这里插入图片描述
在这里插入图片描述

这里arr数组内只有10个元素,但我却访问了11个元素,当我访问到了第11个元素时,就越界了,越界了会发生什么呢

在这里插入图片描述

它会产生一个随机值

3.野指针形成原因三:指针所指向的内存空间被释放

在这里插入图片描述

这里在创建a后我们向编译器申请了4个字节的内存,我们在完成函数test后,返回了一个a的地址,但在test函数结束后,编译器会销毁为test函数所创造的空间,所以你返回的地址所对应的内存实际上已经没有了,所以这个返回值无效

二.指针的运算

1.指针±整数运算

在这里插入图片描述

这里*p++其实由于解引用的优先级很低,所以其实是 * (p++),p++由于是整形,一次跳过4个字节,又由于arr类型是int,其中每个元素都是4个字节,所以+1相当于跳过一个元素,而我每跳过一个元素就把该元素改为0,故打印出来数组的元素全部为0

同理-1就是向前跳跃改指针所对应类型的字节大小

2.指针-指针

前提:两个指针得指向同一块空间
得到的是两个指针之间的元素个数

在这里插入图片描述
在这里插入图片描述

3.指针的关系运算

指针的大小比较实际上就是该指针所存的地址大小比较,就是那一串编号

在这里插入图片描述

三.指针和数组

数组是向编译器申请一块内存来存放数据
指针(变量)是用来存放地址,我们可以通过指针来访问数组

四.二级指针

在这里插入图片描述

这里我们设a=10,给a 4内存单元,每个内存单元都是1个字节,每个内存单元都有各自的编号,我们取出的是首字节编号,我们假设a的编号是如上图,pa内存的就是这个编号。

在这里插入图片描述

那么二级指针就是用来存放一级指针的地址

我们创造一个二级指针ppa,如果pa它的地址是如图,那么ppa内存的就是pa的地址

在这里插入图片描述
在这里插入图片描述

五.指针数组

1.定义

指针数组就是用来存放指针的数组

其实与整形,字符型数组一样都是用于存放数据

在这里插入图片描述

ps:这里插个小知识:我们访问数组内部的元素时都是使用下标如arr[0]。实际上,编译器会自动将这种写法改为 解引用(arr+0),因为arr代表首元素地址,+0就表示该数组第一个元素地址,再解引用就可以得到该元素。同理,arr[9]就是 解引用(arr+8)

2.用一维数组来模拟二维数组

在这里插入图片描述

如果我想创建一个3行4列的二维数组,那我们创造三个一维数组,以及一个指针数组

在这里插入图片描述
在这里插入图片描述

注意在这里a,b,c是数组的名字代表数组的首元素地址,我们用一个指针数组arr将a,b,c三个数组的首元素地址存起来,那么arr[0]就代表a数组的首元素地址,arr[1]就代表b数组的首元素地址,arr[2]就代表c数组的首元素地址。

这里arr[i][j]其实就是 * (arr[i]+j),那么我们就可以理解其实就是分别用每个数组的首元素地址+j再解引用,就可以把三个数组联系起来,从而得到一个二维数组

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

APS生产计划排产在装备制造业的应用

装备制造业是对所有为国民经济各部门的简单再生产和扩大再生产提供技术装备的制造工业的总称,范围包括航空、航天、军工制造;民用飞机、铁路、船舶、汽车等先进交通运输设备制造;石油、矿产、化工、压力容器、电力成套设备制造;以…

Jaya算法在电力系统最优潮流计算中的应用(创新点)【Matlab代码实现】

目录 1 概述 2 数学模型 2.1 目标函数 2.2 约束条件 2.3 Jaya 算法 3 仿真结果 4 Matlab代码实现 1 概述 最优潮流计算与电力系统的稳定、经济运行密切相关,自20世纪60年代提出最优潮流的概念,大量学者相继提出了各种优化技术来求解电力系统的最…

Google Earth Engine(GEE)—— 多光谱指数整合中推导出湿地覆盖类型 (WCT)

湿地覆盖被定义为归因于植被、浑浊度、含水土壤和水量等潜在生物物理条件的湿地空间均匀区域。在这里,我们提出了一种新方法来导出湿地覆盖类型 (WCT),该方法结合了三个常用的多光谱指数 NDVI、MNDWI 和 NDTI,位于印度各地不同地貌和气候环境的三个大型拉姆萨尔湿地。这些湿…

【CNN】SENet——将注意力机制引入通道维度

前言 SENet,胡杰(Momenta)在2017.9提出,通过显式地建模卷积特征通道之间的相互依赖性来提高网络的表示能力,即,通道维度上的注意力机制。SE块以微小的计算成本为现有的最先进的深层架构产生了显著的性能改…

高等数学(第七版)同济大学 习题10-2(中5题) 个人解答

高等数学(第七版)同济大学 习题10-2(中5题) 函数作图软件:Mathematica 11.画出积分区域,把积分∬Df(x,y)dxdy表示为极坐标形式的二次积分,其中积分区域D是:\begin{aligned}&11. \ 画出积分…

算法图解学习2 大O表示

random recording 随心记录 What seems to us as bitter trials are often blessings in disguise. 看起来对我们痛苦的试炼,常常是伪装起来的好运。 大O表示法是一种特殊的表示法,指出了算法的速度有多快。 背景引入 Bob要为NASA编写一个查找算法&…

MobaXterm连接报错Network error: Connection timed out

今天打开MobaXterm远程连接我VMware虚拟机的时候出现以下界面&#xff0c;问题详情如下&#xff1a;Network error: Connection timed out Session stopped - Press <return> to exit tab - Press R to restart session - Press S to save terminal output t…

RabbitMQ介绍

介绍 RabbitMQ是 一个由erlang语言编写的、开源的&#xff0c;基于AMQP协议实现的消息队列&#xff0c;具有MQ应用解耦、流量削峰、异步的特点 官网地址 https://www.rabbitmq.com/ 功能特点 支持顺序消息&#xff0c;保证消息送达消费端的前后顺序 支持消息补偿&#xff0…

计算机是什么

文章目录计算机是什么计算机类别计算机优缺点计算机应用实例计算机是什么 计算机&#xff08;英文“computer”&#xff09;一词源自拉丁文中的“computare”&#xff0c;本意为计算。 发展至今&#xff0c;计算机专门代指“可编程”的电子设备。所谓“可编程”&#xff0c;…

图像超分辨率模型:Real-ESRGAN | 论文阅读+实战记录

前言 最近需要一个超分的模型&#xff0c;经过调研准备用 Real-ESRGAN。特此记录论文阅读和实战过程。 论文阅读 论文地址&#xff1a;Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data Github&#xff1a;https://github.com/xinntao/Re…

[附源码]java毕业设计学生宿舍设备报修

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【教学类-16-01】20221122《世界杯七巧板A4-随机参考图》(大班)

效果展示&#xff1a; 单页效果 多页效果 背景需求&#xff1a; 2022年11月20日 2022年卡塔尔世界杯足球赛在卡塔尔首都多哈举行。借此契机&#xff0c;我设计一份七巧板让幼儿拼”踢足球“的造型。 图片准备&#xff1a; 从网上拉了18张各种”踢球七巧板造型图“ 新建一个…

几种常用关系型数据库架构和实现原理

【摘要】本文介绍几种常用(闭源、开源)关系型数据库的架构和实现原理,包括Oracle、MySQL、PostgreSQL、GaussDB T,涉及产品最新参数指标等请以各官网为准。 一、 Oracle (一) Oracle 架构 Oracle Server包括数据库(Database)和实例(Instance)两大部分,两者相互独立…

SSO单点登录流程详解

概念 单点登录&#xff08;Single Sign On&#xff09;&#xff0c;简称为 SSO&#xff0c;是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中&#xff0c;用户只需要登录一次就可以访问所有相互信任的应用系统。 背景 企业发展初期&#xff0c;系统设计不…

关于pbootcms中被挂马以后的处理

最近一段时间很多使用pbootcms建设的网站都遭遇到了首页挂马的问题,表现形式便是首页页面增加了很多?id123,?/?id37087875.csv,?id26993492.shtml等等形态.当我们查看后台系统日志中的蜘蛛访问或者首页上多了这些链接的时候,基本上就是被挂马了,这个时候我们需要及时作出处…

Go:微服务架构下的单元测试(基于 Ginkgo、gomock 、Gomega)

文章目录简介一、Ginkgo包的引入和简单介绍二、Dockertest 使用三、编写单元测试1. 编写 data 层的测试代码四、引入 gomock 包&#xff0c;mock 对象模拟依赖项1. 编写生成 mock 文件方法2. 编写 biz 层的测试方法3. 验证单元测试小结简介 本文主要使用 Ginkgo[2] 、gomock[3…

Vue之watch监听

计算属性不能用异步代码&#xff1b;有返回值的函数&#xff0c;用异步代码也不行&#xff1b;没有返回值的函数&#xff0c;可以用异步代码&#xff1b;watch监听也可以放异步代码&#xff1b;data、methods、computed、watch的区别&#xff1a; data&#xff1a;状态&#xf…

试题 算法提高 网格贪吃蛇(离散化 + DP)

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述   那个曾经风靡全球的贪吃蛇游戏又回来啦&#xff01;这次贪吃蛇在m行n列的网格上沿格线爬行&#xff0c;从左下角坐标为(0,0)的格…

miui14即将闪亮登场 小米首批机型搭配名单 旧版系列机型可能无望更新

小米系列机型年底大动作。新版机型发布和miui14系统将会在一些机型中更新&#xff0c;而最新的miui14版本以简便 精简 轻巧为目的。希望miui14版本能为米粉带来意想不到的期待。以往较多米粉都反馈系统越更新越臃肿。系统资源占用太多。 小米 MIUI 14 的版本号以及适配支持机型…

柯桥俄语培训机构哪家好,能说出“как”的多少种用法呢?

学了这么久俄语的你&#xff0c;能说出“как”的多少种用法呢&#xff1f; 一起来看看这份“как”最强使用攻略吧~ 01 作为疑问副词在句中做状语&#xff0c;"如何""怎么样""多么" 例&#xff1a; Как твои дела&#xff1f; …