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 

语言中也被规定为存储该函数的存储单元的首字节地 

址 指针变量也可以存储代码段中与某函数相关的存 

储单元的地址.这样的指针变量又称为指向函数的指 

针变量 通过指向函数的指针变量可以获得与函数相 

关的存储单元的地址.确定了存储单元的位置就能以 

间接引用的方式使用相关的存储单元.执行指令.即可 

以利用指向函数的指针变量调用执行指针变量指向的 

函数。 

函数的功能体现在把输入变成输出.因此.形参的 


本文标签: 变量 指针 存储单元 函数