一文轻松拿捏C语言的指针的基础使用
创作时间:
作者:
@小白创作中心
一文轻松拿捏C语言的指针的基础使用
引用
1
来源
1.
https://developer.aliyun.com/article/1653498
计算机中程序的运行都是在内存中进行的,变量也是在内存中分配的空间,且不同类型的变量占用不同大小的空间。那么如何访问内存中变量存储的数据呢?有两种方式:直接访问和间接访问。
1. 指针
指针是 C 语言最重要、最难理解的概念之一,也是掌握C语言的关键。指针的概念源于内存单元的编号,每个内存单元都有地址,变量存储的数据也有地址。例如:
int num = 5;
通过地址能找到所需的变量单元,可以说,地址指向该变量单元,将地址形象化地称为“指针”。具体来说:
- 变量:命名的内存空间,用于存放各种类型的数据。
- 变量名:变量名是给内存空间取的一个容易记忆的名字。
- 变量值:在变量单元中存放的数据值。
- 变量的地址:变量所使用的内存空间的地址,即指针。
- 指针变量:一个变量专门用来存放另一变量在内存中数据的地址(即指针),通过访问指针变量可以达到访问内存中另一个变量数据的目的。
上图中,地址0x00000001是变量 i 的指针,i_pointer就是一个指针变量。体会:指针就是内存地址,使用指针访问变量,就是直接对内存地址中的数据进行操作。
2. 指针变量定义
指针变量的定义格式如下:
数据类型 *指针变量名 [=初始地址值];
- 数据类型是指针变量所指向变量数据类型。可以是 int、char、float 等基本类型,也可以是数组等构造类型。
- 字符 * 用于告知系统这里定义的是一个指针变量,通常跟在类型关键字的后面。比如, char表示一个指向字符的指针, float表示一个指向 float 类型的值的指针。此外,还有指向数组的指针、指向结构体的指针。
举例:
int *p; //读作:指向int的指针”或简称“int指针”
这是一个指针变量,用于存储int型的整数在内存空间中数据的地址。
3. 指针的应用场景
指针主要应用于以下场景:
- 使用指针访问变量或数组的元素。
- 应用在数据结构中,如链表、树等。
4. 指针的运算
指针作为一种特殊的数据类型可以参与运算,但与其他数据类型不同的是,指针的运算都是针对内存中的地址来实现的。
取址运算符:&
取址运算符,使用“&”符号来表示。作用:取出指定变量在内存中的地址,其语法格式如下:
&变量
举例:
int num = 10;
printf("num = %d\n", num); // 输出变量的值。 num = 10
printf("&num = %p\n", &num); // 输出变量的内存地址。&num = 00000050593ffbbc
说明:
- 在输出取址运算获得的地址时,需要使用“%p”作为格式输出符。
- 这里num的4个字节,每个字节都有地址,取出的是第一个字节的地址(较小的地址)。
指针变量的赋值
- 指针变量中只能存放地址(指针),不要将一个整数(或任何其它非地址类型的数据)赋给一个指针变量。
- C语言中的地址包括位置信息(内存编号,或称纯地址)和它所指向的数据的类型信息,即它是“带类型的地址”。
- 为了避免使用未初始化的指针变量导致不可预料的后果,通常给指针变量赋初始值为0(或NULL),并把值为0的指针变量称为空指针变量。
通过指针变量修改指向的内存中的数据:
int main() {
int num = 10, *ptr;
ptr = #
printf("%d\n",num);
scanf("%d", ptr); //等价于scanf("%d", &num);
printf("%d\n",num);
return 0;
}
取值运算符
在C语言中针对指针运算还提供了一个取值运算符,使用“*”符号表示。其作用与&相反,根据一个给定的内存地址取出该地址对应变量的值。也称为解引用符号。其格式如下:
*指针表达式
其中,“”不同于定义指针变量的符号,这里是运算符。“指针表达式”用于得到一个内存地址,与“”结合以获得该内存地址对应变量的值。
举例:
int main() {
int a = 2024;
int *p;
p = &a;
printf("%p\n",&a); //0000005cc43ff6d4
printf("%p\n",p); //0000005cc43ff6d4
printf("%d\n", *p); //2024
return 0;
}
其实,指针的运算还有很多,比如与整数的加减、自增自减等等,这里就不再一一叙说啦。
好啦,关于指针就先说到这里,希望每天都可以学习一个知识点!
热门推荐
【无麸质饮食】全攻略:破解误区、掌握替代食材,10道食谱让你轻松开始健康生活
如何共创团队规章制度
社区缺人?大学生缺平台?如何打通大学生志愿服务进社区“最后一公里”?
中暑的症状及处置方法
痛风如何通过饮食预防
电脑怎么压缩视频?什么才是批量视频压缩的终极选择
蓝牙耳机拨号键的功能与使用指南
如何评估基金经理的投资表现?这种评估在投资决策中有什么参考意义?
《云上法官》票房从37元到20元:电影终究是“观众的艺术”
山东科技大学重点学科名单有哪些(国家级、省级、市级)
宝宝睡觉总哼唧、扭动,要不要干预?
运动缓解焦虑的科学依据:最新研究揭示乳酸的关键作用
香港中小学:以古诗文为媒,传承弘扬中华传统文化精髓
每天早上吃一个鸡蛋的好处与坏处
10种降糖药!老年2型糖尿病患者降糖药物如何选择?
三维立体图解脚手架工程,通俗易懂
在线老年大学 APP:数字时代的老年学习与生活新引擎
当中国老人“年轻化”,他们该如何平等地参与社会活动?
深圳出租车有了新“神器”:的哥打瞌睡,车子会报警
看颗牙8家诊所给出4种方案 央视曝光口腔医疗机构乱象
乳酸饮品可取代益生菌吗?营养师破解迷思:2种人应注意摄取量
如何在复杂的人际关系中保持高效沟通?
怎样选择支持远程访问的私人NAS
怎么跟猫咪培养感情,才能让它更亲近你呢?
自查!你家猫压力大吗?这5个表现不容忽视!
体脂率计算公式有哪些?BMI法与腰围体重法的双维度计算方案!
2025留学生想落户上海,回国前需要做哪些准备?
整形医院楼梯宽度要求(建筑设计中楼梯宽度的规范要求)
如何使用SSH密钥和公钥加密技术保护您的cPanel服务器
易拉罐充氮大米包装机助力大米包装更新换代