论文导读::对函数和指针的掌握是非常重要的。本文将具体针对函数和指针的关系做详尽的介绍。
论文关键词:函数,指针
0 引言
随着计算机技术的飞速发展及应用领域的扩大,熟练掌握一门语言已变的尤为关键。C语言这门课程在计算机的基础教学中一直占有比较重要的地位,然而要想突破C语言的学习,对函数和指针的掌握是非常重要的,本文将具体针对函数和指针的关系做详尽的介绍。
1 函数的有关概念
为了使程序的编写更加清晰、直观且易于修改,C语言中引用了函数。所谓函数,就是一个程序模块,该模块用来完成一个特定的程序功能。引用一个函数时,需要包括对函数的定义、声明,继而调用。此外,函数主要包括库函数和用户定义函数,调用库函数时,要用#include命令将相关的头文件包含进来。在掌握函数相关概念的同时,有以下几点需要注意:
(1) 函数的定义是平行的,不能在一个函数的内部再定义函数,而只能在一个函数中调用另外一个函数,例如:
int A(int a,…)
{
声明部分;
int B(int b,…)
{
声明部分; 执行部分;
}
执行部分;
}
(例1-1)
显然毕业论文ppt,这种定义函数的方法是错误的,在函数A中不能包括对函数B的定义。正确的定义方法如下:
int A(int a,…)int B(int b,…)
{{
声明部分; B(a,…); 执行部分;声明部分; 执行部分;
}}
(例1-2)
其中,函数A中是可以调用函数B的。
(2) 调用函数和被调用函数
由上例1-2可以看出,函数A在执行的过程中包括了对函数B的调用,则函数A称为调用函数(调用函数B),而函数B被函数A调用,称为被调用函数论文开题报告。
(3) 实参和形参
调用函数中定义的变量是实参,被调用函数中定义的变量是形参。如例1-2,函数A中的变量a是实参,函数B中的变量b是形参。
(4) 实参变量和形参变量之间的独立性
实参变量和形参变量之间只存在值的传递过程,实参变量的存储空间在调用函数中分配,而形参变量的存储空间在被调用函数中分配,被调用函数执行完毕后,其所分配的存储空间被释放,即形参变量的存储空间被释放,它不会返回值给实参变量,也不会参与调用函数的继续执行。例如(实现两个数的交换):
main( ) voidswap(int a, int b)
{{
int a, b; intc;
swap(a,b); c=a;a=b; b=c;
printf(“%d,%d”,a,b);printf(“%d,%d”,a,b);
}}
(例1-3)
显然,函数main是调用函数(调用函数swap),函数swap是被调用函数。main函数中的a,b由main函数分配存储空间,而swap函数中的a,b由swap函数分配存储空间。main函数执行到swap函数时,调用swap函数,swap函数为其变量分配存储空间,然后实现了swap函数中变量a,b的值交换,执行完毕后即释放其分配变量的存储空间。继而,main函数继续执行,但其变量a,b没有做任何改变,即main函数不能实现a,b的交换。由上例可以看出,若单纯的使用变量,则被调用函数无法改变调用函数中的变量值,即swap函数无法实现main函数中变量a,b的交换。
2 指针的有关概念
指针是C语言中功能最强大,使用最广泛的一种数据类型,主要用于描述存储单元的地址。通过使用指针,可以在函数中进行传址调用;规范的使用指针,可以使程序简洁、紧凑、高效。
(1) 指针变量的定义
定义指针变量的一般形式:类型标识符 *变量名;其中毕业论文ppt,变量名前的符号“*”表示将要定义的变量,类型说明符表示该指针变量所指向数据的类型。例如:
int *p1; char *p2;float *p3;
分别定义了整形指针变量p1,字符形指针变量p2,以及浮点形指针变量p3。
(2) 指针变量的引用
&为取地址运算符,该运算符是一个单目运算符,运算结合性为自右至左,它返回其右边变量在内存中的地址。其一般形式为:&变量名,例如:
int x=3,*p; p=&x;指针变量p指向变量x。
在使用x的值时,可以直接使用x,也可以用*p来代替使用x。此外,指针变量一定是和它所对应的变量相互引用,即指针变量在使用时一定要有明确的指向,必须赋予具体的值,否则将可能导致错误。
3 指针与函数的关系
在函数的编写过程中,若单纯的只用变量参数,则无法实现被调用函数改变调用函数中变量值的目的。而为了实现这一目的,就需要函数和指针之间的结合使用论文开题报告。
(1) 引用指针,可以实现调用函数和被调用函数中的指针变量共同指向调用函数中的存储单元,从而实现被调用函数改变调用函数中变量值的目的。例如:
main()void change(int *p2)
{{
int a,*p1;*p2=3;
a=2; p1=&a;}
change(p1);
printf(“the value of a is:%d”,a);
}
由上例可以看出,在调用函数(main函数)中定义了变量a和指针变量p1,被调用函数(change函数)中定义了指针变量p2。程序首先从main函数开始执行,分配变量a和指针变量p1的存储单元,此时指针变量p1指向变量a(p1=&a)。当程序执行到change函数时,程序跳转到change函数执行其函数体,change函数为其指针变量p2分配存储单元,同时p2也得到了p1传过来的值(变量a的地址),此时p2也指向了调用函数中的变量a,即实现了p1和p2共同指向了调用函数中的存储单元(变量a的存储单元),change函数执行其函数体(*p2=3),即使a的值变为3。change函数执行完毕后,释放其变量的存储空间,转而继续执行main函数,此时a的值已经发生改变(由2变为3),实现了被调用函数改变调用函数中变量值的目的。
(2) 调用函数和被调用函数中实参和形参之间的关系图
被调用函数执行完毕后毕业论文ppt,释放它所分配的存储单元,而调用函数分配的存储单元仍继续使用。此外,只有当调用函数中传指针值(即实参是指针值),而被调用函数中引用变量(即形参收到指针值后,在函数体内引用变量值),才能达到改变的目的。
例如,实现变量a和b的交换,程序如下:
main()
{
inta,b,*x,*y;
a=2; b=5;
x=&a;y=&b;
swap(x,y);
printf(“%d,%d”,a,b);
}
void swap(int *x, int *y)void swap(int *x, int *y)
{ {
int *t; int*t;
t=x; x=y; y=t;*t=*x; *x=*y; *y=*t;
} }
(例1) (例2)
例1虽然传的是指针值,但在函数体的执行过程中引用的仍然是指针值(引用x和y),所以不能实现a和b的交换;例2程序传指针值后,引用变量(*x和*y,即a和b),所以能实现a和b的交换。
4 结束语
在以后的编程过程中,若遇到想通过被调用函数改变调用函数中变量值的目的,则可以把该变量的地址值传给被调用函数,从而达到改变的目的。鉴于文章篇幅及个人能力有限,本文肯定还存在许多不足之处,仅供大家学习和参考。
参考文献
[1]谭浩强.C程序设计(第二版).清华大学出版社,2004.
[2]杜友福.C语言程序设计(第二版).科学出版社,2007.
[3]陈志泊,王春玲.面向对象的程序设计语言――C++.人民邮电出版社,2002.
|