【C语言精髓 之 指针】指针*、取地址、解引用*、引用

/*** @file            * @author          jUicE_g2R(qq:3406291309)————彬(bin-必应)*						一个某双流一大学通信与信息专业大二在读	* @copyright       2023.9* @COPYRIGHT			 原创技术笔记:转载需获得博主本人同意,且需标明转载源* @language        C */
  • UpData Log👆 2023.9.22 更新进行中
  • Statement0🥇 一起进步
  • Statement1💯 有些描述是个人理解,可能不够标准,但能达其意

技术提升站点

  • 定义指针 与 取地址
int val=1;		//为 变量名为val 的 整型数据 开辟空间,并存下val的值
int* p=&val;	//定义一个指针变量(是指针的原因使用到了*)的名字为p,p记录的是(&val)val变量的地址,此时 p指针 指向 val 这个整型变量
printf("%d 的地址是 %p\n",val, p);
  • 解引用:返回p所指对象的值
//要使用 p所指向地址的值(即val的值) 的话,需要 将p(实质上是 val 的地址)通过 * 解出来
printf("指针p指向的val的地址为 %p,解引用得到val的值为%d",p, *p);
  • 通过 指针 修改 指针 所指地址的变量的值
//定义指针后,*p 实质上就是 val,修改 *p 就是修改 val(因为变量名val 与 p 都指向的 val的地址)
*p=2;			//此时 *p=val=2
printf("修改后val的值为:%d",val);
  • 修改指针的指向
//声明两个变量,
int a=1,b=2;
int* p=&a;		//初始化 p 指向a变量
p=&b;			//修改 p指针 存储 b的地址,p由 指向a变量 变为 指向b变量
printf("修改后的p指针指向的值为:%d",*p);
  • 无指向的野指针

注:声明一个指针但不给分配指向,这个指针是无效的野指针(必须要给指针明确的指向)

要先为 开辟一个空间(内存) 来进行 存储、调用、修改 操作

//错误示范
int* p;
*p=2; cout<<*p;//下面这种是可以的
int* p;int val;
p=&val;			//分配指向
*p=2;
  • 输入
int val;    int *p=&val;
scanf("%d",p);      //p=&val,效果等同于scanf("%d",&val)
printf("%d",val);
  • (*p)++ 、 * (p++) 、*p++ 的区别

运算符优先级

点击了解更多

圆括号()优先级高于下面两种,结合方式是 自左向右不论任何情况先执行括号内的东西!

自增运算符++(不论前缀还是后缀) > 取值运算符*,这两种的结合方式都是 自右向左

//(*p)++ :p指针指向对象的值加1(地址值不变)
int val=1;    int* p=&val;
(*p)++;		printf("p指针指向对象的值为%d,val的值为%d",(*p), val);//Output:2,2//*(p++) 与 *p++ 操作结果相同,都是将地址值加1个整型字节(4bit)
int val=1;    int* p=&val;
printf("val的地址为%p\n",p);
*p++;			//现在的p指针就是一个野指针,(*p)是无效的
printf("p指针的值(地址)为%p",p);
//Output:
val的地址为63fe14
p指针的值(地址)为63fe18

根据运算符优先级的结合方式可以推出:++ *p++(*p)(思索一下自右向左的意思)操作的结果是一致的(即对 p指针指向对象的值加1)

  • 传参与收参

如何修改 val 的值?

/*---------传参直接传地址--------*/
//传的如果是地址的话,都是直接对 &val这个地址 进行操作(来直接修改地址对应的值)
void Update(int* addr){ //(接收参数的是地址)声明一个指针变量为address(此时 address=p=&val)(*addr)++;          //将地址 解引用 得到值,对值修改
}
/*写法二
void Update(int* addr){int temp=(*addr);   //申请一个新内存,用来操作值,然后将p指向对象的值存下(temp现在就是 val的值 的代理人)temp++;		(*addr)=temp;   
}
*/
int main(int argc,char* argv[]){int val=1;    int* p=&val;Update(p);          //传入的是 &val(val的地址)printf("%d",val);   return 0;
}//Output:2/*---------传参传的是val的值(地址的解引用)--------*/
void Update(int temp){ temp++;				//此时的修改是影响不到val的
}
int main(int argc,char* argv[]){int val=1;    int* p=&val;Update(*p);        //传入的是 val(val的值),就和传普通的变量一样!printf("%d",val);   return 0;
}//Output:1

指针 是 C语言 的精华,是 C语言 的尽头,值得细品!!!

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

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

相关文章

【C】指针初阶

指针 为了后续一些安排打基础&#xff0c;决定使用C/C作为算法主语言&#xff0c;所以从这篇文章开始&#xff0c;从指针开始总结 指针 -> 指针进阶 -> 字符串函数 -> 自定义类型 -> 动态内存管理 -> 数据结构 还有C一些基础语法的回顾&#xff08;基于算法…

【postgresql 】 ERROR: “name“ is not supported as an alias

org.postgresql.util.PSQLException: ERROR: "name" is not supported as an alias 错误&#xff1a;不支持将“name”作为别名 SELECT real_name name FROM doc_user 加上 在关键词上加上 “” 示例&#xff1a; SELECT real_name "name" FROM do…

SWIFT中最常见的内存泄漏陷阱

SWIFT中最常见的内存泄漏陷阱 如果您有内存循环&#xff0c;它将在调试器中向您显示警告&#xff1a; 如果确实有一个&#xff08;或通常是一堆&#xff09;&#xff0c;则表示您有一个泄漏的物体。 您如何预防呢&#xff1f; 就像在关闭的第一行中添加[unowned self]一样简…

“Vue进阶:深入理解插值、指令、过滤器、计算属性和监听器“

目录 引言&#xff1a;Vue的插值Vue的指令Vue的过滤器Vue的计算属性和监听器vue购物车案例总结&#xff1a; 引言&#xff1a; Vue.js是一款流行的JavaScript框架&#xff0c;它提供了许多强大的功能来简化前端开发。在本篇博客中&#xff0c;我们将深入探讨Vue的一些高级特性…

Java项目:SSM的网上书城系统

作者主页&#xff1a;Java毕设网 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 一、相关文档 1、关于雅博书城在线系统的基本要求 &#xff08;1&#xff09;功能要求&#xff1a;可以管理个人中心、用户管理、图书分类管理、图书信息管理、…

Java 函数式编程思考 —— 授人以渔

引言 最近在使用函数式编程时&#xff0c;突然有了一点心得体会&#xff0c;简单说&#xff0c;用好了函数式编程&#xff0c;可以极大的实现方法调用的解耦&#xff0c;业务逻辑高度内聚&#xff0c;同时减少不必要的分支语句&#xff08;if-else&#xff09;。 一、函数式编…

【Vue3+Vite+Ts+element-plus】vue 使用 tsx语法详解

系列文章目录 【Vue3ViteTselement-plus】 超级详细 最新 vite4vue3tselement-pluseslint-prettier 项目搭建流程 【Vue3ViteTselement-plus】使用tsx实现左侧栏菜单无限层级封装 【Ts 系列】 TypeScript 从入门到进阶之基础篇(一) ts类型篇 文章目录 系列文章目录前言一、必要…

MySQL 数据库学习(六)备份与binlog日志

1 案例1&#xff1a;完全备份与恢复 1.1 问题 练习物理备份与恢复练习mysqldump备份与恢复 1.2 方案 在数据库服务器192.168.88.50 练习数据的备份与恢复 1.3 步骤 实现此案例需要按照如下步骤进行。 步骤一&#xff1a;练习物理备份与恢复 冷备份&#xff0c;需停止数…

Python手写人脸识别

Python手写人脸识别 引言 人脸识别是一种通过计算机视觉和模式识别技术来识别和验证人脸的技术。Python是一种广泛使用的编程语言,它提供了许多强大的库和工具来实现人脸识别。 在Python中,可以使用多种方法来实现人脸识别,包括基于特征提取的方法、基于深度学习的方法等…

clickhouse学习之路----clickhouse的特点及安装

clickhouse学习笔记 反正都有学不完的技术&#xff0c;不如就学一学clickhouse吧 文章目录 clickhouse学习笔记clickhouse的特点1.列式存储2. DBMS 的功能3.多样化引擎4.高吞吐写入能力5.数据分区与线程级并行 clickhouse安装1.关闭防火墙2.CentOS 取消打开文件数限制3.安装依…

java字符串的学习总结

/* 总结: 1. ★★★★★★★String 是字符串,内容不可改变★★★★★★★★ 常用方法: (1)length() 长度(2)equals(string类型) 比较当前字符串于括号里的字符串是否相同(3)startsWith(st…

支持向量机基本原理,Libsvm工具箱详细介绍,基于支持向量机SVM的遥感图像分类

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 完整代码和数据下载链接: 基于SVM的遥感图像分类识别,基于支持向量机SVM的遥感图像分类识别(代码完整,数据齐全)_图像匹配中SVM多分类问题资源-CSDN文库 https://downloa…

Python 运行代码

一、Python运行代码 可以使用三种方式运行Python&#xff0c;如下&#xff1a; 1、交互式 通过命令行窗口进入 Python 并开始在交互式解释器中开始编写 Python 代码 2、命令行脚本 可以把代码放到文件中&#xff0c;通过python 文件名.py命令执行代码&#xff0c;如下&#xff…

ARMv7处理器

本文档介绍常见的 ARM 架构,包括 Cortex-A5,Cortex-A7, Cortex-A8, Cortex-A9, Cortex-A15. 常见的术语 DFT(Design for Test), 为了增强芯片可测性而采用的一种设计方法 APB(Advanced Peripheral Bus), 是一种低速外设总线接口,通常用于将外部设备(如I/O端口、定时器、UA…

机器学习——pca降维/交叉验证/网格交叉验证

1、pca降维&#xff1a;目的是提升模型训练速度 定义&#xff1a; 使用方法&#xff1a;给训练数据或者测试数据进行降维处理 给训练数据降维 给测试数据降维&#xff1a;这里1就要用transform&#xff0c;而不是fit_transform&#xff0c;因为之前训练数据降维时特征已经确定…

构建基于neo4j知识图谱、elasticsearch全文检索的数字知识库

前言&#xff1a; 在数字化时代&#xff0c;知识库的建设正逐渐成为企业、学术机构和个人的重要资产。本文将介绍如何使用neo4j和elasticsearch这两种强大的数据库技术来构建知识库&#xff0c;并对其进行比较和探讨。 技术栈&#xff1a; springbootvueneo4jelasticsearch…

【每日一题】1993. 树上的操作

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;深度优先搜索 写在最后 Tag 【深度优先搜索】【树】【设计数据结构】【2023-09-23】 题目来源 1993. 树上的操作 题目解读 本题是一个设计类的题目&#xff0c;对于设计类的题目就一步步的实现题目要求的成员方法即可…

【ACDC数据集】:预处理ACDC心脏3D MRI影像数据集到VOC数据集格式,nii转为jpg,label转为png

【Segment Anything Model】做分割的专栏链接&#xff0c;欢迎来学习。 【博主微信】cvxiaoyixiao 本专栏为公开数据集的预处理&#xff0c;持续更新中。 文章目录 1️⃣ ACDC数据集介绍2️⃣ ACDC数据集样例 3️⃣ 预处理ACDC目标 4️⃣ 处理结果样图 5️⃣ 代码 6️⃣ 划分测…

十五)Stable Diffusion使用教程:另一个线稿出3D例子

案例:黄金首饰出图 1)线稿,可以进行色阶加深,不易丢失细节; 2)文生图,精确材质、光泽、工艺(抛光、拉丝等)、形状(包括深度等,比如镂空)和渲染方式(3D、素描、线稿等)提示词,负面提示词; 3)seed调-1,让ai随机出图; 4)开启controlnet,上传线稿图,选择cann…

leetcode 2560. 打家劫舍 IV

2560. 打家劫舍 IV 沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。 由于相邻的房屋装有相互连通的防盗系统&#xff0c;所以小偷 不会窃取相邻的房屋 。 小偷的 窃取能力 定义为他在窃取过程中能从单间房屋中窃取的 最大金额 。…