9.2 变量的指针和指向变量的指针变量

news2025/1/13 3:03:10

9.2 变量的指针和指向变量的指针变量

  • 一.指针变量的定义
  • 二.指针变量的引用
  • 三.整理至https://appd872nnyh9503.pc.xiaoe-tech.com/index的笔记

在这里插入图片描述

一.指针变量的定义

变量的指针 就是变量的地址。 我们可以定义一个指向 变量 的指针变量。
这种指针变量,我们在定义的时候,会引入一个*在定义的语句中,表示“这是一个指针变量”。

指针变量定义的一般形式:

类型标识符    *标识符                             标识符:就是指针变量名字
int i,j ;  //普通变量
float k;  //普通变量
int *mypoint1,*mypoint2;     //定义两个指针变量,这两个指针变量    指向整型变量的。
                            //指针变量定义时  变量名前面有个*,这个是和普通变量最明显的区别。
float *pm3;   //指向实型变量的指针
float *pm4;   //指向实型变量的指针

如何让一个整型指针变量 指向 一个整型变量,可以用赋值语句使一个整型指针变量 指向 一个整型变量(普通变量)。

mypoint1 = &i;     //&地址符        等价于mypoint1指向了i
mypoint2 = &j;    //等价于mypoint2指向了j

说明:
1.定义指针变量的时候,指针变量前是有“”的,表示这是正在定义一个指针变量,
但是,我用指针变量,指针变量名前是没有"
"的。多以,指针变量名是mypoint1,mypoint2,而不是*mypoint1,*mypoint2。
2.一个指针变量只能指向同一个类型的类型的变量(普通变量);

pm3 = &i;     //编译错误

在这里插入图片描述

vs中 调试——窗口——内存 可查看内存地址。

二.指针变量的引用

牢记:指针变量中只存放地址。不要将一个整型变量赋值给一个指针变量;

mypoint = 4;    //mypoint是一个指针变量,4是一个整数

和指针变量相关的运算符有两个:
(1)& :取地址符
(2)* :指针运算符(间接访问运算符),
2.1 乘法运算符 34
2.2定义指针变量的时候,我们用到
,这个叫指针运算符;
但是,若这个
不出现在指针定义的场合,而且也不是个乘法运算符,那么这个*依旧是指针运算符。只不过代表的是该指针变量所指向的变量。

int a,b;
int *p1,*p2;    //*表示这两个变量是指针变量。
a =100;
b = 200;
p1 = &a;     //把变量a的地址赋给了p1;     ********现在p1指向了a;
p2 = &b;     //把变量b的地址赋给了p2;     ********现在p2指向了b;
printf("%d,%d\n",a,b);         //*不用于指针定义的场合,代表的是它指向的变量
printf("%d,%d\n",*p1,*p2);    //*p1 ===> a       *p2  ====>  b

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

解析:
1.
&*p1 : &是取址运算符,*是指针运算符。根据上表,这两个运算符优先级相同,但是他们运算符是自右向左结合的。

         所以先看*p1,*p1代表的是p1所指向的变量,其实就是a,那么再执行&运算,其实  &*p1等价于&a;
         又因为&a它本身就是p1,所以&*p1等于啥也没干。
        p1= &*p1;     // ==>&a
        p2= &*p1;    //==>指针变量p2指向了a
   2.    *&a     :  &是取址运算符,*是指针运算符。根据上表,这两个运算符优先级相同,但是他们运算符是自右向左结合的。
         所以先看&a,也就是p1,再进行*运算,*&a ==>*p1,*p1代表的是p1指向的变量,也就是a,所以*&a ==> a。
   3.    (*p1)++  :    *p1是a,所以(*p1++)是a++
(*p1)++;
a;
         *p1++       :  因为  ++和*同级,又是从右到左结合。所以 *p1++ 等价于*(p1++)
           p1++
            地址是个数字,地址加1的意思如下:
            如果普通整型变量i,i++,i =4;则i = 5;就是i这个变量对应的内存中的内容+1;
            同理,指针变量自+1,也肯定是这个指针变量中的内容要自加,但是这种本来是自加1的操作,对于指针来讲就不一定是自加1;自加几,取决于该指针变量所指向的变量类型,如果p1指向的是整型变量,那么p1++的内容要加4;因为int是4个字节。
            p1++意味着p1指向i之后的变量,要完整跳过4个字节,所以p1++后内容如下

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

    *(p1)++    不再指向a,他就指向a后边的内存,这段内存不知道是谁的,所以 *(p1)++ 这个动作非常危险,因为你会改变不属于你的内存;
p1;
p1++;
*p1 = 45;      //极度危险,留下隐患,因为这段内存0x0024F9A8不属于你,你却把这段内存中的值覆盖了。
int *pmax,*pmin,*p,a,b;    //pmax指向大的值,pmin指向小的值
a = 5;
b =8;
pmax = &a;
pmin = &b;
if(a < b)
{
    //为了演示指针变量的赋值,
    p = pmax;
    pmax = pmin;  //现在P指向a(指向了大的值)
    pmin = p;       //pmin指向a(指向了小的值)
}
printf("a = %d,b = %d\n",a,b);        
printf("max = %d,min = %d\n",*max,*min);    

在这里插入图片描述

三.整理至https://appd872nnyh9503.pc.xiaoe-tech.com/index的笔记

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

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

相关文章

信创办公–基于WPS的EXCEL最佳实践系列 (筛选重要数据)

信创办公–基于WPS的EXCEL最佳实践系列 &#xff08;筛选重要数据&#xff09; 目录 应用背景操作步骤1、筛选2、高级筛选 应用背景 在WPS里&#xff0c;筛选有两种&#xff0c;一种是筛选&#xff0c;另外一种则是高级筛选。 操作步骤 1、筛选 可以根据学号、准考证号、考…

MyBatisPlus基础入门学习

系列文章目录 MyBatisPlus基础入门学习 文章目录 系列文章目录前言一、MyBatisPlus简介1.入门案例2.MyBatisPlus概述 二、标准数据层开发1.标准数据层CRUD功能2.分页功能 三、DQL控制1.条件查询方式2.查询投影3.查询条件设定4.字段映射与表名映射 四、DML控制1.Insert2.Delete…

原创文章生成器在线版-ai写作生成器

随着人工智能技术的迅猛发展&#xff0c;越来越多的人开始意识到&#xff0c;利用AI可以实现许多以前不可能想象的事情。其中&#xff0c;一种最能体现人工智能技术优势的应用就是“ai原创文章生成器”。它可以为营销从业者提供一种全新的营销推广方式。 那么&#xff0c;什么是…

AIGC技术赋能下 CRM将迎来怎样的变革?

今年以来&#xff0c;随着ChatGPT的爆火&#xff0c;人工智能&#xff08;AI&#xff09;迎来新一轮的热潮&#xff0c;开始更多地走入人们的视野。如果说2016年“阿尔法狗”&#xff08;Alpha Go&#xff09;大战围棋世界冠军还只是人工智能的“昙花一现”&#xff0c;那么Cha…

在 FPGA 上如何实现双线性插值的计算?

作者 | 殷庆瑜 责编 | 胡巍巍 目录 一、概述 二、What&#xff1f;什么是双线性插值&#xff1f; 二、Why&#xff1f;为什么需要双线性插值&#xff1f; 三、How&#xff1f;怎么实现双线性插值&#xff1f; 关键点1 像素点选择 关键点2 权重计算 升级1 通过查表减少…

深入分析Linux网络丢包

1、背景&#xff1a; 从图中你可以看出&#xff0c;可能发生丢包的位置&#xff0c;实际上贯穿了整个网络协议栈。换句话说&#xff0c;全程都有丢包的可能。 在两台 VM 连接之间&#xff0c;可能会发生传输失败的错误&#xff0c;比如网络拥塞、线路错误等&#xff1b;在网卡…

大数据实战 --- 淘宝用户行为

目录 开发环境 数据描述 功能需求 数据准备 数据清洗 用户行为分析 找出有价值的用户 开发环境 HadoopHiveSparkHBase 启动Hadoop&#xff1a;start-all.sh 启动zookeeper&#xff1a;zkServer.sh start 启动Hive&#xff1a; nohup hiveserver2 1>/dev/null 2>…

计算机体系结构基本概念,指令系统

Amdahl定律 这个定律告诉我们去优化系统中最重要&#xff08;占比最大&#xff09;的部分&#xff0c;作业有个问题&#xff0c;是系统中有多个部件可以改进&#xff0c;可改进部分比例的分母是整个任务&#xff0c;并不是独属于部件 i i i的任务&#xff0c;因此扩展的Amdahl定…

kubespray 部署 kubernetes 排错细节仅供参考

文章目录 1. TASK [kubernetes/preinstall : Hosts | create list from inventory]2: TASK [container-engine/containerd : containerd Create registry directories]3. TASK [kubernetes/control-plane : kubeadm | Initialize first master]4. reslov.conf 权限无法修改5. i…

LeetCode算法小抄 -- 环检测算法 和 拓扑排序算法

LeetCode算法小抄 -- 环检测算法 和 拓扑排序算法 环检测算法(DFS)[207. 课程表](https://leetcode.cn/problems/course-schedule/) 拓扑排序算法(DFS)[210. 课程表 II](https://leetcode.cn/problems/course-schedule-ii/) 环检测算法(BFS)拓扑排序算法(BFS) ⚠申明&#xff1…

第四章-图像加密与解密

加密与加密原理 使用异或运算实现图像加密及解密功能。 异或运算规则(相同为0,不同为1) 运算数相同,结果为0;运算数不同,结果为1任何数(0/1)与0异或,结果仍为自身任何数(0/1)与1异或,结果为另外一个数,即0变1, 1变0任何数和自身异或,结果为0 同理到图像加密解密 加密过程:…

Stable Diffusion成为生产力工具(六):制作一张庆祝五一劳动节的海报

S&#xff1a;AI能取代设计师么&#xff1f; I &#xff1a;至少在设计行业&#xff0c;目前AI扮演的主要角色还是超级工具&#xff0c;要顶替&#xff1f;除非甲方对设计效果无所畏惧~~ 预先学习&#xff1a; 安装webui《Windows安装Stable Diffusion WebUI及问题解决记录》。…

JS逆向 - 破解oklink加密参数及加密数据

版权声明&#xff1a;原创不易&#xff0c;本文禁止抄袭、转载&#xff0c;侵权必究&#xff01; 目录 一、JS逆向目标-会当临绝顶二、JS逆向分析-不识庐山真面目三、JS逆向测试-只缘身在此山中四、JS反逆向-柳暗花明又一村五、oklink逆向完整代码下载六、作者Info 一、JS逆向目…

Redis --- 常用命令、Java中操作Redis

一、Redis常用命令 1.1、字符串string操作命令 Redis 中字符串类型常用命令&#xff1a; SET key value 设置指定key的值 GET key 获取指定key的值 SETEX key seconds value 设置指定key的值&#xff0c;并将 key 的过期时间设为 seconds 秒 SETNX key value 只有在 key 不…

Java入坑之抽象类、设计模式与接口

目录 一、抽象类 1.1定义 1.2特点 1.3使用场景 1.4抽象方法 1.5抽象类的实现 1.6开-闭原则 1.7匿名类 二、设计模式&#xff08;了解&#xff09; 2.1定义 2.2分类 2.3模板设计模式 2.4单例模式 三、接口 3.1定义 3.2语法格式 3.3接口实现 3.4接口类型变量 …

cyberdefenders------------Insider

cyberdefenders------------Insider 防守更聪明&#xff0c;而不是更难 0x01 前言 ​ CyberDefenders 是一个蓝队培训平台&#xff0c;专注于网络安全的防御方面&#xff0c;以学习、验证和提升网络防御技能。使用cyberdefenders的题目来学习恶意流量取证&#xff0c;题目来…

GBDT算法原理及实战

1.什么是GBDT算法 GBDT(Gradient Boosting Decision Tree)&#xff0c;全名叫梯度提升决策树&#xff0c;是一种迭代的决策树算法&#xff0c;又叫 MART(Multiple Additive Regression Tree)&#xff0c;它通过构造一组弱的学习器(树)&#xff0c;并把多棵决策树的结果累加起来…

手把手教你实现控制数组某一个属性之和不能超过某一个数值变量

大家好啊&#xff0c;最近有个小任务&#xff0c;就是我表格多选后&#xff0c;某一项关于栏目数量之和不能超过其他变量 先看图&#xff1a; 代码就是&#xff1a; 这里有一个点就是我需要累加数量之和&#xff0c;其实遍历循环累加也可以 我这里用的是reduce方法 0代表设置…

机器学习实战:Python基于LDA线性判别模型进行分类预测(五)

文章目录 1 前言1.1 线性判别模型的介绍1.2 线性判别模型的应用 2 demo数据演示2.1 导入函数2.2 训练模型2.3 预测模型 3 LDA手写数字数据演示3.1 导入函数3.2 导入数据3.3 输出图像3.4 建立模型3.5 预测模型 4 讨论 1 前言 1.1 线性判别模型的介绍 线性判别模型&#xff08;…

vue2使用sync修饰符父子组件的值双向绑定

1、使用场景 当我需要对一个 prop 进行“双向绑定的时候&#xff0c;通常用在封装弹窗组件的时候来进行使用&#xff0c;当然也会有其他的使用场景&#xff0c;只要涉及到父子组件之间需要传参的都可以使用&#xff0c;尽量不要使用watch监听来进行修改值&#xff0c;也不要尝试…