admin 管理员组文章数量: 1184232
2024年4月21日发(作者:c++搭建web服务器)
实践与经验 /
/
文章编号:1007—1423(2014)04—0041—03 DOI:10.3969/j.issn.1007—1423.2014.04.010
C语言中指针变量的用法
周二强.张妍琰
(河南城建学院计算机科学与工程学院,平顶山467036)
摘要:
C语言中使用指针变量时通常需两步:第一步为指针变量赋值,把某个存储单元的地址存人与指针变量相关的存储
单元中,即让指针变量指向某个存储单元;第二步以间接引用的方式使用指针变量指向的存储单元 利用变量直接使
用存储单元时,存储单元的使用范围受限于变量的作用域,而通过指针变量以间接引用的方式可以扩展存储单元的
使用范围。以间接引用方式使用的存储单元不仅可以是基本数据类型的、数组等,而且可以是没有变量标识的堆空间
上的存储单元.甚至还可以是与代码相关的“函数类型”的存储单元
关键词:
指针;存储单元:C语言
1 指针变量与普通变量的异同
变量标识了计算机内存中的存储单元.用于存储
数据。存储单元是内存块在C语言中的抽象.具有固定
类似int j=i;,语句int*pj=pi;N以使整型指针变量pJ也
存储了变量i的地址.即整型指针变量pJ也指向了整
型变量i。但表达式pi+3实为一个地址加3,对于不熟
悉的地址数据.只有定义了加法的意义才能确定计算
结果。
内容 变量
的大小,分类型,某类存储单元只能存放一种数据 语
句int i;21 ̄义了一个变量i.它对应于一个整型(int)存储
单元,只能存储一个整数(int),变量i可称为整型(int)
变量。指针变量也是变量.因此.它们也标识了存储单
元,也用于存储数据。与普通变量存储常见数据不同.
指针变量用于存储地址 地址是存储单元在计算机中的
编号.用于定位存储单元。在C语言定义语句中用星号
表示地址,例如语句int pi;定义一个变量pi,它对应于
一
5
r l_ ]H厂———] 5 I
I................. I................ __llj
个整型指针(int )存储单元.只能存储一个整型存储
0 Ol2 ffo0
单元的地Jak(int ),可称变量pi为整型指针变量。
语句i=5:可以把整数5存入与变量i相关的存储
单元中 语句pi=&i:可以把与变量i相关的整型存储
单元的地址存入与变量pi相关的存储单元中,此时常
形象地称指针变量pi指向了变量i。它们在内存中的
状态可用图1简单地表示
pi 形象地表示
解码后的原始状态
图1相关变量存储状态简图
在程序中可以通过变量i直接使用相关的存储单
元,例如表达式i+3实为5+3,值为8 指针变量pi保存
程序中使用指针变量通常并非关注其存储的数
据,因为地址只用于标识存储单元,下面分析C语言中
引人指针变量的真正目的。
了变量i的地址。使用指针变量通常表现为使用地址
现代计算机 2014.02上
2 指针变量的作用
如图1所示.当指针变量pi指向变量i时,表达式
pi也标识了变量i相关的存储单元,即在使用存储单
元时既可以用变量i,也可以用 pi。通过变量i直接使
用存储单元的方式称为直接引用:由于操作符 是间
接引用操作符,故称通过表达式 pi使用存储单元的方
式为间接引用 直接使用的方式虽然简便但受变量作
用域的限制 只要获得了存储单元的地址就能以问接
引用的方式使用存储单元.间接引用的方式可以扩展
存储单元的使用范围。以下面的程序为例:
#include<stdio.h>
void swap(int px.int PY)
{
int temp;
temp px;
px= py;
py=temp;
}
int main()
{
int i=2,j=3;
swap(&i,&j);
printf(”%d,%d\n”,i,j);
retum O:
}
由于变量i的作用域局限于main函数中.因此只
能在main函数中通过变量i使用与之相关的存储单
元。swap函数的形参是一个整型指针变量,main中调
用它时,实参分别为变量i和j的地址。当swap函数执
行时.整型指针变量形参px将指向与变量i相关的存
储单元.即在swap函数中表达式*px也标识了与变量
i相关的存储单元.通过*px改变存储单元的值实际上
也改变了变量i的值 swap函数执行期间相关变量的
状态可用图2简单地表示。在swap函数中不能通过变
量i以直接引用的方式使用与之相关的存储单元,但
可以通过 Dx以间接引用的方式使用与变量i相关的
存储单元.因此.间接引用的方式可以扩展存储单元的
使用范围
当函数的形参为指针变量时.可以认为函数需要
存储单元作为输入
@ 现代计算机2014.02上
3 指针变量可以指向的存储单元的类型
指针变量指向的存储单元可以是普通的类型.如
有double f=2.3;double pf-&f.,则 pf与f标识了同一
块存储单元。
2
3
0x0012 ffO0
px
OxOO12 ff04
py
图2相关变量的状态
指针变量指向的存储单元可以是数组.如有int a
[3]={1,2,31;int( pa)[3】=&a;,则 pa与a标识了同一
块存储单元。( pa)[0】与a[O】标识了同一块存储单元,值
为1。
指针变量指向的存储单元可以是指针类型的存储
单元,如有int i=2, pi=&i;int料ppi=π,则指向整型
指针变量的指针变量ppi存储了整型指针变量Di的地
址,*ppi与pi标识了同一块存储单元,语句int pj=
ppi;与语句int pj=pi;作用相同,都可以使整型指针变
量pi指向整型变量i
指针变量指向的存储单元可以是“函数”类型 函
数会被编译成二进制形式的指令.用于存储指令的存
储单元通常位于内存中称为代码段的区域 函数在内
存中也是连续存放的.与数组名类似.函数名的值在C
语言中也被规定为存储该函数的存储单元的首字节地
址 指针变量也可以存储代码段中与某函数相关的存
储单元的地址.这样的指针变量又称为指向函数的指
针变量 通过指向函数的指针变量可以获得与函数相
关的存储单元的地址.确定了存储单元的位置就能以
间接引用的方式使用相关的存储单元.执行指令.即可
以利用指向函数的指针变量调用执行指针变量指向的
函数。
函数的功能体现在把输入变成输出.因此.形参的
版权声明:本文标题:C语言中指针变量的用法 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://roclinux.cn/b/1713676633a646516.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论