C-指针-010

1指针

1.1语法:

【基类型*指针变量名】
【int *p=&a】

1.2语义:

【基类型】:指针变量指向的目标的数据类型
【*】:表示此时定义的变量是一个指针类型的变量
【&a】:一块存放着int类型数据的空间的地址
【*p】:
通过指针间接访问变量的过程:
(1)首先拿出p指针变量中的值(地址)到内存中定位(找内存单元的编号)
(2)从定位处开始,偏移出sizeof(基类型)大小的一块空间(确定所需内存空间大小)
(3)把这块空间当做一个基类型的变量来看 (检索存储值)

1.3指针变量的应用:

1.3.1在函数间传递信息(被调函数修改主调函数的数据)

1.两步:
(1)将主调中想被修改的变量的地址传给被调(【&】传址)
(2)必须要做【*】运算(间接访问),实现修改(【*】改值)
2.练习:
1:求两个数的和
2:求两个数中的大值,小值

在这里插入图片描述

3:使用指针将数组逆序

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

1.3.2用于处理数组的函数中

1.通过指针传递地址,函数可以直接操作源数据。(效率高)
2.要注意使用【const】关键字保护数组中的数据。
3.使用递增递减指针操作数组需要注意越界问题,c只保证指向数组及数组后面第一个位置的指针有效。

1.4指针相关操作

1.4.1取地址

【&】:

1.4.2间接访问数据(解引用)

【*】:*运算符给出指针指向地址上储存的值
注意:
(1)未初始化的指针解引用的结果是未定义的(随机值)。

1.4.3指针与整数相加

【p+1】:地址偏移
【p-1】:如果相减的结果超出了初始指针所指向数组的范围,计算结果是未定义的。

1.4.4递增指针

【p++】:
【p--】:

1.4.5指针的关系运算

【>】:
【>=】:
【<】:
【<=】:
【==】:
【!=】:

1.4.6指针减指针

前提:两个指针是同一类型的指针
【p-q】:表示指针之间差了几个基类型。
【p+q】:指针不能做加法运算。

1.5指针中的优先级问题

1.【*】的优先级高于【+】。
2.【*】和【++】的优先级相同,结合性是从右至左。
3.【*】的优先级低于【[]】。

1.6指针的应用

1.6.1系统数据存储方式(大小端)

补充:
(1)野指针:指针指向不明确,随机;故通常将指针初始化为NULL;【NULL】:表示0号地址
(2)未初始化的指针,不要进行解引用。(值存储的位置不明确)
(3)数组的越界指针只有一个可以进行解引用:C只能保证指向数组任意元素的指针和指向数组后面第1个位置的指针有效。
(4)指针变量的格式转换说明:
【%p】:
【%u】:
【%lu】:

2指针与数组

2.1数组指针

2.1.1一维数组

【int (*p)[2];】:p指向一个内含2个【int】类型值的数组的指针。
详解:p是一个指针,指向一个数组,该数组有两个元素。

2.1.2二维数组

【ar[3][2]】:ar是指向数组的指针,该数组内含2个int类型的元素

2.2指针数组

2.1.1一维数组

【int *p[2];】:p是一个内含2个指针的数组,每个指针都指向【int】类型的元素。

2.1.2二维数组

3指针与指针

3.1

3.2二级指针

3.2.1语法

【基类型 **p;】     
基类型:指针类型
p:二级指针变量名

3.2.2语义

指向指针的指针,用于指向一个指针的地址
理解:
1.指针变量
2.指针变量的地址【*p】:一级指针本身
【**p】:二级指针所指向的变量值
【**p=a    *p=&a    p=&*p】 
【**p】: 二级指针变量(p)中存放的是一级指针变量(*p)的地址(&*p),一级指针变量(*p)中存放的是基类型变量(a)的地址(&a),基类型变量的值(**p)。
【ar[i][j]】:二级指针变量(ar)中存放的是一级指针变量(ar[i])的地址(&ar[i]),一级指针变量(ar[i])中存放的是基类型变量(a,b,c,d...)的地址(&a,&b,&c,&d...),基类型变量的值(ar[i][j]),即(a,b,c,d...)。

3.2.3二级指针的应用

(1)二级指针主要用于多级数据之间的传递。
(2)传递一级指针的地址进函数,从而在函数内改变函数外一级指针的值,而一级指针的值可能为某个变量的地址。

4指针与函数

5.指针与【const】

5.1一级解引用

在一级解引用的前提下:
(1)【const】限定的指针可以指向普通指针和【const】限定的指针
(2)普通指针(非【const】限定的指针)只能指向普通指针
参照:【c primer plus 第6版-10.6.2-P557】
(3)【const* p】:不能改变指向的值。
(4)【*const p】:不能改变指向的地址。(理解:【*p】是取值,【p】是取地址)

6指针的兼容性

(1)不同的指针类型不具有兼容性(如int类型的指针不能兼容double类型的指针;指向指针的指针与指向数组的指针)
(2)

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

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

相关文章

【高德地图】Android搭建3D高德地图详细教

&#x1f4d6;Android搭建3D高德地图详细教程 &#x1f4d6;第1章 高德地图介绍✅了解高德地图✅2D地图与3D地图 &#x1f4d6;第2章 搭建3D地图并显示✅第 1 步&#xff1a;创建 Android 项目✅第 2 步&#xff1a;获取高德Key✅第 3 步&#xff1a;下载地图SDK✅第 4 步&…

照片上多余的人怎么处理?这几种方法让你的照片更完美!

照片怎么去掉多余人像&#xff1f;这是许多摄影爱好者经常遇到的问题。有时候&#xff0c;我们拍摄了一张非常美好的照片&#xff0c;但由于某些原因&#xff0c;照片中出现了不希望出现的人物。这时候&#xff0c;我们该如何处理呢&#xff1f;下面&#xff0c;我将分享几种常…

2.5网安学习第二阶段第五周回顾(个人学习记录使用)

本周重点 ①多进程和多线程 1、进程和线程 2、多线程爆破 ②Redis数据库 1、Redis的使用 2、Redis持久化 3、Redis未授权免密登录 ③嗅探和Python攻击脚本 1、嗅探&#xff08;端口扫描和IP扫描&#xff09; 2、SCAPY的应用 3、Python攻击脚本&#xff08;SYN半连接…

计算机网络-局域网

文章目录 局域网局域网拓扑结构以太网以太网传输介质以太网时隙提高传统以太网带宽的途径以太网帧格式 局域网协议IEEE 802参考模型IEEE802.2协议LLC帧格式及其控制字段LLC提供的三种服务 IEEE 802.3协议IEEE 802.4协议IEEE 802.5协议 高速局域网100M以太网千兆以太网万兆以太网…

冲突管理最佳实践

任何团队都无法避免冲突&#xff0c;如何有效管理冲突&#xff0c;将冲突转化为团队成长和凝聚的动力&#xff0c;是任何一个团队管理者的必修课。原文: Best Practices for Managing Conflict in Engineering Management Obie Fernandez Unsplash 冲突在任何组织中都不可避免&…

Android中Transition过渡动画的简单使用

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 一、布局xml文件代码如下&#xff1a; <?xml version"1.0" encoding&quo…

ABB触摸屏维修工控机显示屏维修CP405 A1/A0

ABB人机界面维修常见故障&#xff1a;黑屏白屏花屏&#xff0c;按触摸屏无反应或反应慢触摸不好&#xff0c;内容错乱&#xff0c;进不了系统界面&#xff0c;无背光背光暗&#xff0c;有背光无字符&#xff0c;不能通信&#xff0c;按键无无反应等均可维修。 此维修检测方法有…

英文输入法(C 语言)

题目 主管期望你来实现英文输入法单词联想功能&#xff0c;需求如下&#xff1a; 依据用户输入的单词前缀&#xff0c;从已输入的英文语句中联想出用户想输入的单词。按字典序输出联想到的单词序列&#xff0c;如果联想不到&#xff0c;请输出用户输入的单词前缀。 注意 英…

Java设计模式 | 七大原则之单一职责原则

一、单一职责原则 基本介绍 对类来说&#xff0c;一个类应该只负责一项原则&#xff0c;如类A负责两个不同职责&#xff1a;职责1&#xff0c;职责2。当职责1需求变更而改变A时&#xff0c;可能造成职责2执行错误&#xff0c;所以需要将类A的粒度分解为A1&#xff0c;A2。 注…

玩主机游戏能省去不少烦恼?+主机该购买哪台?

文/嘉兰SK 来到次世代&#xff0c;玩家们最关心的问题逐渐变成了购买的游戏能否支持升级。 各个游戏厂商也没有闲着。 此前还有标准版、黄金版、终极版、决定版等一系列。 想出很多招数。 于是很多新玩家开始疑惑&#xff1a;你们都说玩主机游戏可以省去很多麻烦&#xff0c;可…

每天一个知识点 - 如何快速熟悉后端项目

入职一家新公司的时候&#xff0c;不可避免的就是接触到新公司的项目&#xff0c;有些项目一启动就是好几年&#xff0c;业务功能极其复杂&#xff0c;下面我总结几个方法让大家快速熟悉后端项目&#xff08;图文结合&#xff09; 用例图简析 用例是系统中的一个功能单元&…

springboot网站开发02-接入持久层框架mybatisPlus

springboot网站开发02-接入持久层框架mybatisPlus&#xff01;经过上一小节内容分享&#xff0c;我们的项目嵌套模式框架搭建好了&#xff0c;下面就是开始编辑具体的业务代码了&#xff0c;我们使用到了持久层框架是mybatisPlus插件。下面是一些具体的植入框架的操作步骤。 第…

Python 光速入门课程

首先说一下&#xff0c;为啥小编在即PHP和Golang之后&#xff0c;为啥又要整Python&#xff0c;那是因为小编最近又拿起了 " 阿里天池 " 的东西&#xff0c;所以小编又不得不捡起来大概五年前学习的Python&#xff0c;本篇文章主要讲的是最基础版本&#xff0c;所以比…

DT DAY3 信号和槽

作业&#xff1a; 1> 思维导图 2> 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 btn3 new QPushButton("按钮3",this);btn3->resize(ui->btn2->width(),ui->b…

研发流程图

1、需求评审流程 2、用例评审流程 3、代码评审流程 4、产品功能上线流程

排序算法整理

排序种类排序特性代码背景 基于插入的排序直接插入排序原理代码 折半查找排序2路查找排序希尔排序(shell) 缩小增量排序原理代码 基于交换的排序冒泡排序原理代码 快速排序&#xff08;重要!&#xff09;原理我的思考 代码 基于选择的排序&#xff08;简单&#xff09;选择排序…

Spark之【基础介绍】

Spark最初是由美国伯克利大学AMP实验室在2009年开发&#xff0c;Spark时基于内存计算的大数据并行计算框架&#xff0c;可以用于构建大型的、低延迟的数据分析应用程序。 Spark是当今大数据领域最活跃、最热门、最高效的大数据通用计算平台之一。 Spark的特点 运行速度快 &am…

Uniapp + VUE3.0 实现双向滑块视频裁剪效果

效果图 <template><view v-if"info" class"all"><video:src"info.videoUrl"class"video" id"video" :controls"true" object-fit"fill" :show-fullscreen-btn"false"play-btn…

sylar高性能服务器-日志(P30-P35)内容记录

文章目录 P30-P32&#xff1a;协程调度01-03一、Scheduler局部变量FiberAndThread&#xff08;任务结构体&#xff09;成员变量调度协程构造函数析构函数startstoprunstopping 二、参考资料 P33-P35&#xff1a;协程调度04-06一、测试1二、测试2 总结 P30-P32&#xff1a;协程调…

开源博客项目Blog .NET Core源码学习(9:Autofac使用浅析)

开源博客项目Blog使用Autofac注册并管理组件和服务&#xff0c;Autofac是面向.net 的开源IOC容器&#xff0c;支持通过接口、实例、程序集等方式注册组件和服务&#xff0c;同时支持属性注入、方法注入等注入方式。本文学习并记录Blog项目中Autofac的使用方式。   整个Blog解…