指针--间接寻址运算符

news2024/11/26 0:30:16

通常,只要指明要访问的变量的内存地址,即可直接访问变量所在的存储单元中的内容。在前面都是直接通过变量名来访问变量的内容。直接按变量名或者变量的地址存取变量的内容的访问方式,
称为 直接寻址(Direct Addressing)
直接寻址操作如下:
scanf(“%d”,&a);
printf(“%d”,a);
通过指针变量间接存取它所指向的变量的访问方式称为间接寻址(Indirecr Addressing)
如果用类比的方法来理解直接寻址间接寻址的话,那么变量a所占的存储单元就好比抽屉A,指针变量p所占的存储单元好比是抽屉B,抽屉B中放着抽屉A的钥匙,直接寻址好比直接在抽屉A中放取东西,而间接寻址好比先到抽屉B中取抽屉A的钥匙,然后打开抽屉A,往抽屉A中放取东西。
在C语言中,获取变量的地址需要使用取地址符&。
既然如此,那么如何通过指针变量pa来存取它所指向的变量a的值呢?
这就要用到指针运算符(Pointer Operator),也称间接寻址运算符(Indirection Operator)或解引用运算符(Dereference Operater),即 * 。间接寻址运算符 * 用来访问指针变量指向的变量的值。运算时,要求指针已被正确初始化或者已指向内存中某个确定的存储单元。

例题:使用指针变量,通过间接寻址输出变量的值。
在这里插入图片描述

#include <stdio.h>

int main(void)
{
	int a=0,b=1;
	char c='A';
	int *pa=&a,*pb=&b;
	char *pc=&c;
	printf("a is %d\t&a is %p\tpa is %p\t*pa is %d\n",a,&a,pa,*pa);
	printf("b is %d\t&b is %p\tpb is %p\t*pb is %d\n",b,&b,pb,*pb);
	printf("c is %c\t&c is %p\tpc is %p\t*pc is %c\n",c,&c,pc,*pc);
}

如程序运行结果所示,将该变量a的地址存储到指针变量pa中以后,就可以通过形如pa这样的表达式得到指针变量pa所示的变量a的值了,因此输出pa的值和输出a的值是等价的,因此修改pa的值也就相当于修改a的值。
这说明,我们可以像使用普通变量a一样使用
pa。
程序修改如下:

#include <stdio.h>

int main(void)
{
	int a=0,b=1;
	char c='A';
	int *pa=&a,*pb=&b;
	char *pc=&c;
	printf("a is %d\t&a is %p\tpa is %p\t*pa is %d\n",a,&a,pa,*pa);
	printf("b is %d\t&b is %p\tpb is %p\t*pb is %d\n",b,&b,pb,*pb);
	printf("c is %c\t&c is %p\tpc is %p\t*pc is %c\n",c,&c,pc,*pc);
	*pa=100;
	printf("a is %d\t&a is %p\tpa is %p\t*pa is %d\n",a,&a,pa,*pa);
}

在这里插入图片描述
在上面的程序中,星号(*)在程序的不同上下文显示了不同的功能:
1、*作位置在类型说明符用于定义指针变量
2、*作为间接引用运算符,用于读取并显示指针变量中存储的内存地址所对应的变量值,即指针变量所指向的变量的值,这两种用法之间其实并无关系。引用指针所指向的变量的值,也成为指针的解引用(Pointer Dereference)。

注意:
(1)永远清楚每个指针指向了哪里,指针必须指向一块有意义的内存。
(2)永远清楚每个指针指向的对象的内容是什么。
(3)永远不要使用未初始化的指针变量。

在这里插入图片描述
未初始化的指针直接使用的后果。无法输出任何数据(或者在运行过程中出现错误)。

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

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

相关文章

STM32读取BH1750光照强度数据打印到串口

【1】BH1750是什么&#xff1f; BH1750是一种数字式环境光强度传感器&#xff08;Digital Light Sensor&#xff09;&#xff0c;也称为其他名称&#xff0c;例如GY-302传感器、BH1750FVI传感器等。它的工作原理是通过收集光线照射到传感器上的量来测量环境亮度。 使用I2C&am…

操作系统 第三章 3.2 错题整理

页面引用串长度是什么意思 合法位存在位 不存在即发生故障 区分好页表项和逻辑地址 是不同的 逻辑地址48bit 偏移量12bit 页号36bit 页表项8B 4KB/8B2^9 一个页面能存放2^9个页表项 页号9bit&#xff0c;36/94 虚拟存储器包括内存和磁盘对换区&#xff0c;工作集要频繁用到&…

深度学习:使用UNet做图像语义分割,训练自己制作的数据集,详细教程

语义分割(Semantic Segmentation)是图像处理和机器视觉一个重要分支。与分类任务不同&#xff0c;语义分割需要判断图像每个像素点的类别&#xff0c;进行精确分割。语义分割目前在自动驾驶、自动抠图、医疗影像等领域有着比较广泛的应用。我总结了使用UNet网络做图像语义分割的…

我们不一样-康耐视visionpro和apple vision pro

​ 机器视觉Halcon-不同颜色快速识别 康耐视Visionpro是美国cognex visionpro。 康耐视 VisionPro 是领先的计算机式视觉软件。它主要用于设置和部署视觉应用 - 无论是使用相机还是图像采集卡。借助 VisionPro,用户可执行各种功能,包括几何对象定位和检测、识别、测量和对准…

【Web服务应用】LVS负载均衡集群

LVS负载均衡集群 一、企业级集群含义1.1集群的含义1.2LVS一些专业术语 二、企业集群分类2.1负载均衡集群2.2高可用集群2.3高性能运算集群&#xff08;High Performance Computer Cluster&#xff09; 三、负载均衡的架构3.1负载均衡的结构 四、负载均很集群的工作模式4.1NAT模式…

JDBC连接数据库步骤(入门到进阶全)

目录 一、JDBC是什么&#xff1f; 二&#xff0c;JDBC的本质是什么&#xff1f; 为什么要用面向接口编程&#xff1f; 三、JDBC实现原理 四、使用idea开发JDBC代码配置驱动 ​编辑 五、JDBC编程六步概述 六、JDBC编程实现 1.插入实现 2.删除与更新实现 3 .类加载的方式注…

Jetson AGX Orin安装Anaconda、Cuda、Cudnn、Pytorch、Tensorrt最全教程

文章目录 一&#xff1a;Anaconda安装二&#xff1a;Cuda、Cudnn安装三&#xff1a;Pytorch安装四&#xff1a;Tensorrt安装 一&#xff1a;Anaconda安装 Jetson系列边缘开发板&#xff0c;其架构都是arm64&#xff0c;而不是传统PC的amd64&#xff0c;深度学习的环境配置方法…

chatgpt赋能python:Python对接技术在SEO中的应用

Python对接技术在SEO中的应用 Python作为一种高性能的编程语言&#xff0c;被广泛应用于各种领域&#xff0c;其中也包括了搜索引擎优化&#xff08;SEO&#xff09;领域。Python对接技术&#xff0c;也称为API对接技术&#xff0c;是指通过调用API接口来获取数据、信息或实现…

AI数字人打造之sadtalker让照片开口说话

1 sadtalker介绍 西安交通大学也开源了人工智能SadTalker模型&#xff0c;通过从音频中学习生成3D运动系数&#xff0c;使用全新的3D面部渲染器来生成头部运动&#xff0c;可以实现图片音频就能生成高质量的视频。 论文地址&#xff1a;Learning Realistic 3D Motion Coefficie…

chatgpt赋能python:Python屏蔽语句的重要性

Python屏蔽语句的重要性 Python是一种高级程序设计语言&#xff0c;被认为是开发Web应用程序、数据科学和人工智能的最佳语言之一。在编写Python程序时&#xff0c;每个人都会遇到需要屏蔽语句的情况。在本文中&#xff0c;我们将详细介绍Python屏蔽语句的重要性和用法。 什么…

chatgpt赋能python:Python建模仿真:优秀的工具与技巧

Python建模仿真&#xff1a;优秀的工具与技巧 在现代科技时代&#xff0c;建模仿真是许多不同行业的核心部分&#xff0c;帮助工程师和科学家研究解决许多问题。Python作为一种简单易学且强大的语言&#xff0c;已经被广泛应用于建模仿真领域。 Python的优点 Python在建模仿…

用Python进行数学建模(一)

一、导入数据 1.直接赋值 2.读取 Excel 文件 3.代码示例 import pandas as pd# 读取数据文件 def readDataFile(readPath): # readPath: 数据文件的地址和文件名try:if (readPath[-4:] ".csv"):dfFile pd.read_csv(readPath, header0, sep",") # 间隔…

chatgpt赋能python:Python嵌入C:一个高效的编程技巧

Python嵌入C&#xff1a;一个高效的编程技巧 作为一名有10年Python编程经验的工程师&#xff0c;我发现在某些情况下&#xff0c;Python嵌入C是一种高效的编程技巧。这种技巧可以使您利用Python的简洁性和高级功能&#xff0c;同时仍然保持程序的执行速度。在本文中&#xff0…

chatgpt赋能python:Python对接硬件:从入门到精通

Python对接硬件&#xff1a;从入门到精通 Python是一门极为强大的编程语言&#xff0c;它不只是用来进行数据分析和Web开发的&#xff0c;也可以用来对接各种硬件设备。这是因为Python具有简单易学&#xff0c;语法简洁&#xff0c;库众多的优点。 什么是Python对接硬件 Pyt…

通过AI工具(ChatGPT接口)生成一字未改的论文,查重率4.2%,可以直接当作论文使用

论文题目&#xff1a;基于AIOT技术的能源控制器的设计以及应用 查重结果&#xff1a;4.2% AI工具国内体验&#xff0c;关注&#xff1a;码视野&#xff0c;回复关键字&#xff1a;1002 一、引言 随着全球经济的快速发展和人口的增长&#xff0c;对能源的需求日益增加。然而&…

nodejs环境变量配置问题记录

问题一&#xff1a;Error: EPERM: operation not permitted, open ‘D:\Program Files\nodejs\node_cache\_cacache\tmp\bccd20 这个问题主要是没有权限导致的。 问题二&#xff1a;使用node命令提示 ‘node‘ 不是内部或外部命令&#xff0c;也不是可运行的程序 这个错误是环…

chatgpt赋能python:Python如何将文件另存为:让您的文件管理更便捷

Python如何将文件另存为&#xff1a;让您的文件管理更便捷 随着数字化时代的来临&#xff0c;文件管理已经成为我们日常工作不可缺少的一部分。当涉及到大量的文件管理时&#xff0c;手动操作可能会浪费大量的时间和精力。 在这种情况下&#xff0c;自动化的解决方案将会是很有…

【玩转Linux操作】用户管理(命令讲解配上样例解释)

&#x1f38a;专栏【玩转Linux操作】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【Counting Stars 】 欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f354;添加用户⭐命令&#x1f388;useradd 用户名 ⭐演示…

【日志解析】【启发式】Drain:一种用于日志解析的深度解析树

Drain&#xff1a;An Online Log Parsing Approach with Fixed Depth Tree 文章目录 Drain&#xff1a;An Online Log Parsing Approach with Fixed Depth Tree1 论文出处2 背景2.1 背景介绍2.2 针对问题2.3 创新点 3 主要设计思路3.1 Drain整体结构3.2 具体步骤 4 实验设计5 个…

pycharm利用快捷键,快速注释多行代码的方法分享

最近在pycharm的新手学习群里&#xff0c;发现有些小伙伴依然在“手工”进行代码的注释&#xff0c;效率较低。 下面分享pycharm利用快捷键&#xff0c;快速注释多行代码的方法。可以帮助pycharm初学者加倍提升代码的注释效率。 代码注释快捷键 pycharm代码注释的快捷键为 c…