6.1指针概述

本文介绍了指针在C/C++中的重要性,包括其在简化代码、数据结构表示、内存管理和多返回值等方面的应用。同时,文章详细解释了变量地址的概念,直接存取与间接存取的区别,以及指针变量的特殊性质,提醒读者注意指针的复杂性和潜在错误风险。
摘要由CSDN通过智能技术生成

指针是C/C++语言中的一个重要概念

正确而灵活地使用指针变量,可以使程序简洁、紧凑、高效;可以有效地表示复杂的数据结构;可以实现动态分配内存可以得到多于一个的函数“返回值”,如果不使用指针变量,被调函数最多只能通过return语句向主调函数返回一个值,等等

但是指针的概念也比较复杂,而且容易出错

1.变量的地址

要理解指针的概念,必须弄清楚变量的地址
程序中定义的每个变量,在运行时都会给它分配内存单元。编译器根据变量的类型,给变量分配一定字节数的内存空间
例如,C/C++编译器一般为int型变量分配4个字节,为char型变量分配1个字节等等
每个内存单元(即字节)都有唯一的地址 

假设有下面的变量定义语句:
int a = 5, b = 7;
则在内存中给变量a和b各分配了4个字节,如图所示。假设分配给a的4个字节的地址是2000~2003,分配给b的4个字节的地址是2004~2007。一般以变量的低字节地址称呼为它的地址。因此变量a的地址是2000。变量名a与分配给a的这段存储空间就建立了一一对应关系,所有对变量的操作实际上就是对这4个字节进行操作。因此给变量a赋值为5,实际上就是把5以二进制形式存放到这4个字节里
另外,如果想从键盘上输入一个数据到变量a,可以用scanf函数,语句为:scanf("%d",&a);
&a表示a的地址,即把从键盘上输入的数据保存到变量a所在的内存空间中 

2.直接存取与间接存取

前面已提到,由于变量名与分配给变量的存储空间是对应的,因此如果想给变量a赋值,可以直接使用变量名a。如:
a=3+5;
上面这条赋值语句把表达式“3+5”的值存放到变量a所占用的存储空间中,替换原有的值。如图所示
这种直接通过变量名访问变量所占存储空间的方式,称为直接存取方式,或直接访问方式 

还可以采用另一种称为间接存取(间接访问)的方式访问变量。可以定义这样一种特殊的变量,它专门用来存放变量的地址。如右图所示,变量pa就是这种变量要把变量a的地址赋值给pa,可以使用以下语句:
pa&a;
&是取地址运算符,&a就是变量a的地址。执行上述语句后,变量pa的值就是a的地址,即2000
如果要取出变量的值,除了可以采用直接访问方式外,还可以采用间接方式:先找到存放“a的地址”的变量pa,从pa中取出变量a的地址(即2000),然后到2000开始的4个字节中取出变量a的值 

变量pa和变量a构成了一种指向关系,这种指向关系是通过在变量pa中存放变量a的地址来实现的
一个变量的地址称为该变量的指针
。专门来存放另一个变量地址的变量,如pa,称为指针变量
指针变量是一种特殊的变量:它的内容不是一种数值信息,而是地址信息;并且由于它保存了另外一个变变量的地址,从而指向了该变量
在C/C++中用“*”运算符表示指向。pa是一个指针变量,而*pa表示pa所指向的变量
因此,如果要采用间接访问方式访问变量a,可以采用语句:*pa=3+5;该语句把表达式“3+5”的值存放到指针变量pa所指向的变量,即变量a中 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值