admin 管理员组

文章数量: 1086019


2024年12月29日发(作者:null译中文)

EDUCATION FORUM 教育论坛 

C语言巾昀函数与指针 

◆吴昊郭麦成杨亚仿 

引言 

随着计算机技术的飞速发展及应用领域的扩丈, 

熟练掌握一门语言已变的尤为关键。c语言这门课程在 

计算机的基础教学中一直占有比较重要的地位,然而要 

想突破c语言的学习,对函数和指针的掌握是非常重要 

的,本文将具体针对函数和指针的关系做详尽的介绍。 

函数的有关概念 

为了使程序的编写更加清晰、直观且易于修改,C 

语言中引用了函数。所谓函数,就是一个程序模块,该 

模块用来完成一个特定的程序功能。引用一个函数时, 

需要包括对函数的定义、声明,继而调用。在掌握函数 

相关概念的同时,有以下几点需要注意: 

(1)调用函数和被调用函数 

int A(mt a,…) int B(int b,…) 

{ { 

声明部分;B(a,…);执行部分; 声明 

部分;执行部分; 

} } 

由上例可以看出,函数A在执行的过程中包括了对 

函数B的调用,则函数A称为调用函数(调用函数B), 

而函数B被函数A调用,称为被调用函数。 

(2)实参和形参 

调用函数中定义的变量是实参,被调用函数中定义 

的变量是形参。如上例,函数A中的变量a是实参,函 

数B中的变Ji!b是形参。 

(3)实参变量和形参变量之间的独立性 

实参变量和形参变量之间只存在值的传递过程,实 

参变量的存储空间在调用函数中分配,而形参变量的存 

储空间在被调用函数中分配,被调用函数执行完毕后, 

其所分配的存储空间被释放,即形参变量的存储空间被 

释放,它不会返回值给实参变量,也不会参与调用函数 

的继续执行。例如(实现两个数的交换): 

156 信息系统工程I 2011.4.20 

main() void swap(inta,int b) 

{ { 

建匙b;i&££; 

swap(a,b);{ § 致 ; 

P r i n t f(“%d,%d”,a,b); 

printf(“%d,%d”,a,b); 

) ) 

显然,函数main是调用函数(调用函数swap),函 

数swap是被调用函数。main函数中的a,b由main函数分 

配存储空间,而swap函数中的a,b由swap函数分配存储 

空间。main函数执行 ̄Uswap函数时,调用swap函数, 

swap/ ̄数为其变量分配存储空间,然后实现了swap函数 

中变量a,b的值交换,执行完毕后即释放其分配变量的 

存储空间。继而,main函数继续执行,但其变量a,b没 

有做任何改变,il1]main函数不能实现a,b的交换。由上 

例可以看出,若单纯的使用变量,则被调用函数无法改 

变调用函数中的变量值,即sw印函数无法实现main ̄数 

中变量a'b的交换。 

二、指针的有关概念 

指针是C语言中功能最强大,使用最广泛的一种数 

’据类型,主要用于描述存储单元的地址。通过使用指 

针,可以在函数中进行传址调用。 

(1指针变量的定义 1)

定义指针变量的一般形式:类型标识符 变量 

名;其中,变量名前的符号“ 表示将要定义的变 

量,类型说明符表示该指针变量所指向数据的类型。例 

如:int p1;char p2;float掌l,3; 

(2)指针变量的引用 

&为取地址运算符,其一般形式为:&变量名,例 

如: 

int x=3, p;p=&x;指针变量p指向变量x。 

在使用X的值时,可以直接使用X,也可以用 p来代 

替使用x。此外,指针变量一定是和它所对应的变量相 

EDUCATION FORUM教育论坛 

互引用,即指针变量在使用时一定要有明确的指向,必 

须赋予具体的值,否则将可能导致错误。 

被调用函数执行完毕后,释放它所分配的存储单 

元,而调用函数分配的存储单元仍继续使用。此外,只 

有当调用函数中传指针值(即实参是指针值),而被调 

三、指针与函数的关系 

在函数的编写过程中,若单纯的只用变量参数, 

用函数中引用变量(即形参收到指针值后,在函数体内 

引用变量值),才能达到改变的目的。 

则无法实现被调用函数改变调用函数中变量值的目的。 

而为了实现这一目的,就需要函数和指针之间的结合使 

例如,实现变量a和b的交换,程序如下: 

void swap(int x, int y) void swap(int x, int y) 

用。 

(1)引用指针,可以实现调用函数和被调用函数中 

的指针变量共同指向调用函数中的存储单元,从而实现 

被调用函数改变调用函数中变量值的目的。例如: 

main() void change(int p2) 

{ { 

int a,*pl; p2 3; 

a=2;pl=&a; ) 

change(p1); 

printf(“the value of a is:%d”,a); 

} 

由上例可以看出,在调用函数(main函数)中定 

义了变量a和指针变量p1,被调用函数(changelN数) 

中定义了指针变量p2。程序首先从main函数开始执行, 

分配变量a和指针变量P 1的存储单元,此时指针变量p 1 

指向变量a(P1=&a)。当程序执行到change函数时, 

程序跳转到change函数执行其函数体,changel ̄i数为 

其指针变量p2分配存储单元,同时p2也得到了P1传过 

来的值(变量a的地址),此时p2也指向了调用函数中 

的变量a,即实现Ypl和p2共同指向了调用函数中的存 

储单元(变量a的存储单元),changes数执行其函数 

体(*p2=3),即使a的值变为3。changes数执行完毕 

后,释放其变量的存储空间,转而继续执行main函数, 

此时a的值已经发生改变(由2变为3),实现了被调用 

函数改变调用函数中变量值的目的。 

(2)调用函数和被调用函数中实参和形参之间的关 

系图 

{ { 

int t; int t; 

C=x;x=y;y=t; 水’C= x;水x:木y;木y=木t; 

} } 

(例1) (例2) 

例l虽然传的是指针值,但在函数体的执行过程中 

引用的仍然是指针值(引用X和Y),所以不能实现a和b 

的交换;例2程序传指针值后,引用变量( x和 y,即a 

和b),所以能实现a和b的交换。 

四、结束语 

在以后的编程过程中,若遇到想通过被调用函数改 

变调用函数中变量值的目的,则可以把该变量的地址值 

传给被调用函数,从而达到改变的目的。鉴于文章篇幅 

及个人能力有限,本文肯定还存在许多不足之处,仅供 

大家学习和参考。 辩 

参考文献 

[1】谭浩强.c程序设计[M].二版 清华大学出版社,2004. 

【21杜友福.c语言程序设计【M】.二版科学出版社,2007. 

[3]陈志泊,王春玲.面向对象的程序设计语言一一c++『M】.人民邮 

电出版社,2002 

(作者单位:长江大学计算机科学学院) 

信息系统工程l 201 1.4.20 1 B7 


本文标签: 函数 变量 调用函数 指针 执行