【C语言进阶】指针的高级应用(上)

本专栏介绍:免费专栏,并且会持续更新C语言知识,欢迎各位订阅关注。
关注我,带你了解更多关于机器人、嵌入式、人工智能等方面的优质文章,坚持更新!
大家的支持才是更新的最强动力!

文章目录

  • 一、什么是指针?
    • 1.1 访问内存地址
    • 1.2 指针的概念及作用
  • 二、如何定义指针
    • 2.1 方式1
    • 2.2 方式2
  • 三、指针符号*的两个含义
    • 3.1 第一个含义
    • 3.2 第二个含义
  • 总结
  • 思考题


一、什么是指针?

1.1 访问内存地址

一样的事物出现往往先是有需求,或是改进以往不好的地方,在C语言中,指针的出现又是因为什么呢?
回顾一下,在C语言之前我们是如何访问内存地址的呢?

采用汇编指令间接访问;十六进制数直接表示地址。

而随着语言越来越高级,发展出了汇编语言以上的高等语言,首先出现的就是C语言了,因此指针的作用就是代替汇编语言中寻址指令的功能。

1.2 指针的概念及作用

如此我们引出了指针的概念:

在计算机科学中,指针(Pointer)是一种变量,又称为指针变量,它存储了一个内存地址,用于指向其他变量或数据的位置。指针可以被用来直接访问和操作内存中的数据。它提供了一种灵活而强大的方式来处理和管理数据。

以及作用:

间接访问内存地址。在汇编中都有间接访问,其实就是CPU的寻址方式中的间接寻址。

二、如何定义指针

指针变量的定义和初始化方式:

2.1 方式1

先定义后赋值:数据类型*变量名

例如:

int a=1;
int*p;#p即被定义为一个指针。
p=&a;#将a的值赋值给p

2.2 方式2

定义的同时初始化:数据类型*指针的变量 = &变量名

例如:

int*p=&a;

定义指针变量p的时候初始化。这里P前面的*理解跟定义时相同,表示p是一个指针。实际上赋值效果等同于p=&a

三、指针符号*的两个含义

例如:

int a=1;//定义变量a。

3.1 第一个含义

Int *p;

定义指针变量p,该指针指向一个整型数。这里的 *p含义不是代表指针变量p所指向的那个变量,在定义时这里的 *p只是为了告诉编译器p是一个指针而已, P=&a;&a:代表变量a的地址值。将变量a的地址赋值给p,完成“绑定”。那么此时 *p等于a的值,也就是1。

3.2 第二个含义

*p=123;

修改变量a的值。代表指针变量p所指向的那个变量,也就是变量a。即:
*p表示变量p指向跟他“绑定”的那个变量a。可以直接将 *p当作a
Printf(“a=%d”,a)在这里插入图片描述

总结

(1)指指针间接访问功能(CPU的间接寻址)是CPU设计时决定的,这个决定了汇编语言必须能够实现间接寻址,又决定了汇编之上的C语言也必须实现间接寻址。
(2)

思考题

高级语言如Java、C#等没有指针,那他们怎么实现间接访问?

答案是:语言本身帮我们封装了。

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

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

相关文章

【Spring框架】Spring AOP

目录 什么是AOP?AOP组成Spring AOP 实现步骤Spring AOP实现原理JDK Proxy VS CGLIB 什么是AOP? AOP(Aspect Oriented Programming):⾯向切⾯编程,它是⼀种思想,它是对某⼀类事情的集中处理。⽐如…

林大数据结构【2019】

关键字: 哈夫曼树权值最小、哈夫曼编码、邻接矩阵时间复杂度、二叉树后序遍历、二叉排序树最差时间复杂度、非连通无向图顶点数(完全图)、带双亲的孩子链表、平衡二叉树调整、AOE网关键路径 一、判断 二、单选 三、填空 四、应用题

Flutter运行app时向logcat输出当前打开的界面路径且点击可跳转

当一个项目大了目录文件多了,我们往往会为了找到一个文件花费大量的时间和精力,为了快捷方便的调试我们的项目,我们往往需要在打开app运行的时候需要知道当前打开的界面的文件在哪儿,我们这个代码就能快捷的知道我们app正在打开的…

MySQL存储过程(二十四)

你相信吗, 相信那一天的夕阳吗? 上一章简单介绍了 MySQL的索引(二十三),如果没有看过,请观看上一章 一. 存储过程 MySQL从5.0版本开始支持存储过程和函数。存储过程和函数能够将复杂的SQL逻辑封装在一起, 应用程序无须关注存储过程和函数内部复杂的S…

浪潮服务器硬盘指示灯显示黄色的服务器数据恢复案例

服务器数据恢复环境: 宁夏某市某单位的一台浪潮服务器,该服务器中有一组由6块SAS硬盘组建的RAID5阵列。 服务器上存放的是Oracle数据库文件,操作系统层面划分了1个卷。 服务器故障&初检: 服务器在运行过程中有两块磁盘的指示灯…

一个3年Android的找工作记录

作者:Petterp 这是我最近 1个月 的找工作记录,希望这些经历对你会有所帮助。 有时机会就像一阵风,如果没有握住,那下一阵风什么时候吹来,往往是个运气问题。 写在开始 先说背景: 自考本,3年经验&#xff0…

掌握 JVM 的参数及配置

点击下方关注我,然后右上角点击...“设为星标”,就能第一时间收到更新推送啦~~~ JVM(Java虚拟机)是Java编程语言的核心组件之一,它负责执行Java程序,并提供一系列参数和配置选项,可以调整Java程…

JVM | 从类加载到JVM内存结构

引言 我在上篇文章:JVM | 基于类加载的一次完全实践 中为你讲解如何请“建筑工人”来做一些定制化的工作。但是,大型的Java应用程序时,材料(类)何止数万,我们直接堆放在工地上(JVM)…

AI Chat 设计模式:12. 享元模式

本文是该系列的第十二篇,采用问答式的方式展开,问题由我提出,答案由 Chat AI 作出,灰色背景的文字则主要是我的一些思考和补充。 问题列表 Q.1 给我介绍一下享元模式A.1Q.2 也就是说,其实共享的是对象的内部状态&…

TCP的三次握手四次挥手

TCP的三次握手和四次挥手实质就是TCP通信的连接和断开。 三次握手:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。 四次挥手&a…

【数据结构】快速排序

快速排序是一种高效的排序算法,其基本思想是分治法。它将一个大问题分解成若干个小问题进行解决,最后将这些解合并得到最终结果。 快速排序的主要思路如下: 选择一个基准元素:从待排序的数组中选择一个元素作为基准(…

gitlab CI/CD 安装 gitlab runner

一、为什么需要安装gitlab runner ? 极狐GitLab Runner 极狐GitLab Runner 是在流水线中运行作业的应用,与极狐GitLab CI/CD 配合运作。 说白了就是你部署的一个agent。 二、如何安装? 1.介绍通过helm部署github runner 2.helm添加仓库 h…

openCV图像读取和显示

文章目录 一、imread二、namedWindow三、imshow #include <opencv2/opencv.hpp> #include <iostream>using namespace std; using namespace cv;int main(int argc,char** argv) {cv::Mat img imread("./sun.png"); //3通道 24位if (img.empty()) {std:…

多语言gRPC开发入门与避坑指南

目录 gRPC相关介绍 什么是gPRC gPRC的优点 gPRC的缺点 gPRC定位 协议缓冲区&#xff08;Protocol Buffers&#xff09; 四种调用方式 gRPC开发三大步骤 第一步&#xff1a;定义和编写proto服务文件 第二步&#xff1a;proto文件转化为gRPC代码 第三步&#xff1a;调…

致远A8+数据库账密信息泄露

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 文章作者拥有对此文章的修改和解释权。如欲转载或传播此文章&#xff0c…

【论文阅读24】Better Few-Shot Text Classification with Pre-trained Language Model

论文相关 论文标题&#xff1a;Label prompt for multi-label text classification&#xff08;基于预训练模型对少样本进行文本分类&#xff09; 发表时间&#xff1a;2021 领域&#xff1a;多标签文本分类 发表期刊&#xff1a;ICANN&#xff08;顶级会议&#xff09; 相关代…

Windows环境下VSCode安装PlatformIO Cero报错ERROR: HTTP error 403 while getting

安装PlatformIO插件成功&#xff0c;初始化失败 错误信息判断问题尝试访问https://pypi.tuna.tsinghua.edu.cn/simple/platformio/成功点击文件后报错如下&#xff1a; 解决问题- 换源 &#xff08; Windows下有两个地方需要更改&#xff09;cmd命令行Pip文件 总结&#xff1a;…

Android如何用系统签名打包应用

前言 应用使用系统签名可以在用户不需要手动授权的情况下自动获取权限。适合一些定制系统中集成apk的方案商。 步骤 需要在AndroidManifest.xml中添加共享系统进程属性&#xff1a; android:sharedUserId"android.uid.system"如下图所示&#xff1a; 找到系统定制…

opencv基础40-礼帽运算(原始图像减去其开运算)cv2.MORPH_TOPHAT

礼帽运算是用原始图像减去其开运算图像的操作。礼帽运算能够获取图像的噪声信息&#xff0c;或者得到比原始图像的边缘更亮的边缘信息。 例如&#xff0c;图 8-22 是一个礼帽运算示例&#xff0c;其中&#xff1a; 左图是原始图像。中间的图是开运算图像。右图是原始图像减开运…

车载开发核心技术——SystemUI控制技术

SystemUI是指车载开发中的一个重要组件&#xff0c;它负责管理和控制车机的用户界面和交互功能。本文将详细介绍SystemUI的各项控制技术&#xff0c;包括音量控制、RingtonePlayer、电源管理、任务管理、通知栏和服务定制&#xff0c;并提供相关代码示例和解析。 一、音量控制…