一、指针是什么?
指针也是一个变量,但是这个变量存储的是一个地址,指向一个存储单元。我们可以根据指针(地址)找到他所指的变量,并对这个变量进行操作(赋值等)。通过C里面的取地址符号&和取所指内容的符号*可以很方便的表示指针以及指针所指的变量之间的关系。
二、为什么要用指针?
为什么要用指针?指针能够带来哪些好处?以下内容引用课本上的内容:
“正确而灵活的应用的指针,可以有效的表示复杂的数据结构;能够动态的分配内存;方便的使用字符串;有效而方便的使用数组;在调用函数时获得一个以上结果;能直接处理内存单元地址等”
以上的概括应该算是比较完整的,但是对于初学C的人可能又会理解起来很抽象(可能都理解不了什么是数据结构);我们尝试从最简单的-----“在调用函数时获得一个以上结果”来看看指针的作用。
1》值传递:C中在函数调用时始终采取“值传递”的方式。意思是这样的:并不是实参直接参与了函数(参加了函数内的各类操作),只是实参把他的值传递给形参去参与函数,完成函数内的操作(函数调用时形参被分配了内存,形参的值是实参的拷贝;但要明白,形参和实参不是一个变量,不占用相同的内存,形参发生变化了实参不一定变化。就好比三个变量a,b,c执行了步骤:b=a;b=c后,a不一定等于c)
例1:请看下面的代码。代码是要实现两个数(a,b)的交换,于是构造了交换函数swap;但是能完成目的吗?
例2:那么怎么办呢?应用指针。理解下面的程序,他能很好的完成数字交换的工作。
这里面可能有同学会疑问“为什么这样就可以?这里函数调用也是值传递啊”。
对。这里也是但值传递;但是在swap里面,是根据指针对所指向的变量进行了操控,(可以给他起个名字-----上帝之手)你心里要明白,我们在函数调用时,不是x和y互相
交换了,而是通过这两个指针,对他们所指的内容(即a,b本身)进行了调换。
例3:如果你理解了以上我所说的,再看看下面这段代码,他能完成任务吗?
怎么样?是不是有点糊涂。我来帮你理理思路。就算你用指针做函数参数,函数调用依旧是值传递的。例2中,x,y指向a,b,通过*x,*y就可以改变a,b;例3中,x,y指向a,b,swap交换了x,y;可这对主函数里的c,d指针以及变量a,b没有带来任何改变。
原文地址:http://blog.csdn.net/u014254779/article/details/39050783