指针从一开始被设计出来的时候,其目的不是用来存储某一个具体的常量或变量,它的目的只有一个,就是存放相应变量的地址,即这个变量的内存地址。我们定义完成一个变量之后,就可以将这个指针指向这个变量了。所谓指向某个变量,说直白点就是将这个变量的地址存入指针中。当我们在用指针作为数据交换函数的传递参数时,它其实传入的是这两个变量的地址,而在函数中我们在做这两个变量内容交换时,传递进入函数的指针变量的值是不会变的,还是存放最初的这两个变量的地址,但是当我们做交换操作时,就将原本存在地址A中的变量放入了地址B,将原本存放在B中的变量放入了地址A。
指针变量形式参数执行流程
所以说,我们在交换两个变量的内容时使用指针形式参数去传递参数,从现象上来看貌似是将两个形式参数的内容交换了,但是从本质上来看,指针形式参数的内容其实是没有任何变化的,变化的只是这两个指针所指向的内存中的内容进行了改变。理解了这个函数的指针形式参数,接下来的内容就很理解了。指针的定义需要用到一个特殊的符号“*”,这个符号和运算符中的乘法运算符是同一个,以后在使用的时候需要注意。这个“*”指针运算符在做指针运算的时候具有两种含义,我们先来讲述下在定义指针变量时的用法。指针变量的定义方式为:数据类型 *指针变量名 = 初始化值;如定义一个指针变量“a_pt”,让其指向int类型变量a。根据上面所写的,定义一个名叫“a_pt”的指针变量很简单,但是首先要去确定定义的这个指针变量的数据类型,一般地,我们用这个指针变量指向什么类型的变量,就将其定义成那个相应的类型。这里我们所指向的变量是int类型的,因此将这个指针变量定义成int类型。第二点需要注意的是如何将这个指针变量初始化的时候就指向变量a,前面我们说过,指针变量最终的目的就是用来存储变量的地址,因此只需要在指针变量“a_pt”初始化的时候,将变量a的地址赋给这个指针变量即可。那么如何获取变量a的地址呢?只需要在变量前面加“&”符号即可返回变量a的地址。我们可以写个简单的程序,先定义一个变量a,然后用“&”符号获取其地址,再将这个地址打印出来。
获取变量地址并打印
在我们顺利获取到变量地址之后,只需要将这个地址直接赋值给我们定义的指针变量即可。
指针变量的定义
我们定义了一个整形类型的指针,并且将其指向变量a。当然,根据我们指向对象的不同,我们还可以定义如char类型,long类型,float类型这些简单的数据类型指针,甚至还可以定义后面会学习的指针数组,结构体指针等复杂的数据类型指针。
文/Edward上一节中,我们利用了一个小知识来介绍了一下指针,在上面这个例子中,小明和小丽手中的这个杯子就好比我们C语言中的变量,它确实是实实在在存放一些有具体意义的数据。这个杯套就类似于C语言中指针的作用...
文/Edward上一节中,我们利用了一个小知识来介绍了一下指针,在上面这个例子中,小明和小丽手中的这个杯子就好比我们C语言中的变量,它确实是实实在在存放一些有具体意义的数据。这个杯套就类似于C语言中指针的作用,假设我们由100个这种杯子的内胆,里面分别存放了不同类型的饮料,那么我们想要拿取其中某一杯饮料时,只需要手中有1个杯套,就可以取不同的饮料了。再来说下函数参数传递的问题。在C语言中,每个变量被定义好之后(Auto类型定义),编译器便会在内存的栈区为它们开辟出来内存空间来存放这些变量。这些内存空间不管是连续的还是断续的,它们都会被分配不同的地址。而如果这些变量作为形式参数传入函数的时候,实际上仅仅是把变量里面存放的常数传递给函数,而函数内部的临时变量又是这个函数被初始化的时候创立的,和调用处的传递变量不是同一个,因此不管再怎么去改写形式参数里面传递进来的内容,本质上只是改变函数内部这些局部变量的内容。
函数的参数传递指针从一开始被设计出来的时候,其目的不是用来存储某一个具体的常量或变量,它的目的只有一个,就是存放相应变量的地址,即这个变量的内存地址。我们定义完成一个变量之后,就可以将这个指针指向这个变量了。所谓指向某个变量,说直白点就是将这个变量的地址存入指针中。当我们在用指针作为数据交换函数的传递参数时,它其实传入的是这两个变量的地址,而在函数中我们在做这两个变量内容交换时,传递进入函数的指针变量的值是不会变的,还是存放最初的这两个变量的地址,但是当我们做交换操作时,就将原本存在地址A中的变量放入了地址B,将原本存放在B中的变量放入了地址A。
指针变量形式参数执行流程所以说,我们在交换两个变量的内容时使用指针形式参数去传递参数,从现象上来看貌似是将两个形式参数的内容交换了,但是从本质上来看,指针形式参数的内容其实是没有任何变化的,变化的只是这两个指针所指向的内存中的内容进行了改变。理解了这个函数的指针形式参数,接下来的内容就很理解了。指针的定义需要用到一个特殊的符号“*”,这个符号和运算符中的乘法运算符是同一个,以后在使用的时候需要注意。这个“*”指针运算符在做指针运算的时候具有两种含义,我们先来讲述下在定义指针变量时的用法。