news 2026/6/9 2:08:12

C语言的指针与地址

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言的指针与地址

在C中&有多种用法,这里只讲取地址用法。

&只能取已经定义的变量的地址。将内存比作宾馆的房间,变量就是房间号int num = 10;你租下了一个房间(分配了一块内存),并把数字10放了进去。这个房间现在有了一个临时的、由系统分配的门牌号。int *p = # & 就像是问管理员:“请告诉我num这个房间的门牌号是多少?” 管理员告诉你后,你得到了地址 。int *p你把这个门牌号记在了便签p上。所以,&的前提是必须先有一个“房间”(变量),它才能去获取这个房间的地址。

———————————————————————————————————————————

C中的*也有多种用法,这里只讲解引用、与强制类型转换符配合、声明符。

1·声明时*只是表示这是一个指针变量:

int *ptr;// 声明一个指向整数的指针ptr char *str; // 声明一个指向字符的指针str

指针代表的是内存地址,而非数值,虽然内存地址在底层也是用数字表示的,但C语言的高级抽象层面,编译器严格区分了“数值”和“地址”。如果p是一个指向int类型的指针,那么p++就是p的地址值加sizeof(int)(通常是4字节),如果p是一个普通整数,那么p++就只是数值+1。

2·解引用,当*用在已声明的指针变量前(或者是指针类型的表达式)时,表示访问该指针指向的内存地址中的值:

int num = 10; int *ptr; ptr = # printf("%d", *ptr);// 输出10,访问ptr指向的值

这里的ptr是一个指针变量,存储地址。*ptr是一个整形变量,保存的是指向地址的值。&num是一个地址。

3·强制类型转换,*本身并不是强制类型转换符,但*经常和强制类型转换符一起出现

int value = *(int *)0x1000;

这里是创立了一个普通变量value,只注重于地址的值。这里的0x1000作为地址(本质上是一个整数类型的常量),需要先被(int *)强制类型转换成一个指向int类型的指针,指向的地址就是0x1000

然后最左边的*对临时指针解引用,cpu就会去地址为0x1000读取一个int大小的数据。这里的0x1000就不是变量,是常量,不是有名的指针,而是无名的、临时的指针。这样的意义就是声明一个整形变量,存储的值是地址为0x1000开始的按类型取值的值。

char *p = (char *)0x1000;

这种方法和上述方法有所不同,这里创立了一个指针变量p,后续可以通过指针变量p继续操作。0x1000先被强制转换成指向char类型的指针,然后初始化指针变量,这个初始化等同于 ​​​​​​char *p; p=(char *)0x1000只不过左边这样写叫做赋值。这样的意义就是:声明一个名为p的字符指针,指向内存地址为0x1000的位置。

———————————————————————————————————————————

关于取地址方式:&通常用于已经声明的变量的取地址操作。*用于一个由整形常量(通常看成指定的地址起点)强制类型转换成无名的(临时的)指针,然后通过解引用去获取值,或直接创立指针去存储地址。一定要注意的是,*的解引用需要用于地址,如果是普通量比如int p,那么编译器会报错。

如果给我一个地址,要求传递到指针中,然后使cpu通过这个指针去那个地址读取值,就可以用*的方法。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 10:34:04

机场货库区平板车预测算法与路径规划研究框架

机场货库区环境特殊:时间敏感性强、安全要求高、多主体协同复杂。以下是一个系统研究框架: 一、核心研究问题拆解 1.1 预测算法研究维度 需求预测:航班动态→货物吞吐量→平板车需求量 到达预测:外部车辆到达时间、内部车辆周转时间 拥堵预测:关键节点(安检口、装卸区)…

作者头像 李华
网站建设 2026/6/8 9:44:28

CopilotKit多用户AI协作:构建下一代智能交互应用

CopilotKit多用户AI协作:构建下一代智能交互应用 【免费下载链接】CopilotKit Build in-app AI chatbots 🤖, and AI-powered Textareas ✨, into react web apps. 项目地址: https://gitcode.com/GitHub_Trending/co/CopilotKit 在当今数字化工作…

作者头像 李华
网站建设 2026/6/9 19:15:31

Python 类方法、实例方法和静态方法:何时使用以及如何区分?

在 Python 中,类是定义数据和行为蓝图的核心。定义在类内部的函数通常被称为方法,但它们根据其如何被调用以及能访问哪些数据,可以分为三种主要类型:类方法 (classmethod)、实例方法(默认)和静态方法 (stat…

作者头像 李华
网站建设 2026/6/8 10:00:14

LiteIDE X38.4终极实战指南:10分钟掌握高效Go开发

LiteIDE X38.4终极实战指南:10分钟掌握高效Go开发 【免费下载链接】liteide LiteIDE is a simple, open source, cross-platform Go IDE. 项目地址: https://gitcode.com/gh_mirrors/li/liteide 还在为复杂的Go开发环境配置而头疼吗?想要一款既轻…

作者头像 李华
网站建设 2026/6/9 15:03:53

16、编程中的条件判断与循环结构详解

编程中的条件判断与循环结构详解 在编程领域,条件判断和循环结构是非常重要的基础概念,它们可以帮助我们根据不同的情况执行不同的操作,或者重复执行某些代码块。下面将详细介绍条件判断和循环结构的相关知识,并结合具体的代码示例进行说明。 1. 文件格式转换脚本 在处理…

作者头像 李华
网站建设 2026/6/8 2:00:47

揭秘DeepPavlov对话日志:从数据迷雾到精准优化的实战指南

揭秘DeepPavlov对话日志:从数据迷雾到精准优化的实战指南 【免费下载链接】DeepPavlov An open source library for deep learning end-to-end dialog systems and chatbots. 项目地址: https://gitcode.com/gh_mirrors/de/DeepPavlov 当你的AI助手频繁给出令…

作者头像 李华