一般来说,一个函数里的局部变量只能在这个函数里被访问到。比如在函数foo中定义了一个局部变量a,然后调用另一个函数bar,在bar里是访问不到a的。但如果想在bar里修改a该怎么办呢?
注意到函数的参数是函数对外的接口,相当于函数的输入,一个自然的想法是将a当成参数传递给bar。但这种情况下传递给bar的其实是a的一个拷贝,是与a独立的一个变量,尽管二者的值相等。在bar里修改这个拷贝的变量对a没有任何影响。
一个解决办法便是通过传递a的地址(即指向a的指针)来代替直接传递a。这样在bar里就可以通过这个地址访问并修改a了。
你可以理解为指针是一条路,在函数里面可以沿着它去修改它指的内容,不然的话是不能访问到原版变量的
通俗点讲就是,你问一个人路时,那个人把你要去的地方的地址告诉了你,而不是直接将那个地方的情况详细的说了一遍!
函数的参数传递有三种方式:值传递,指针传递,引用传递
假如定义一个函数 func(int a)
现在有一个整型变量int x = 8;
1、值传递:func(x),就是调用函数时将x的值传入函数,注意!!!这时传入的是x变量的副本,而不是x变量本身,虽然副本和本身的值一样,但是存储地址不一样,所以对副本的改变不会影响本身。
2、指针传递:直接将变量x的地址传入,这是func()函数要改写,func(int *a);然后定义一个指针
指向x :int *px = x;此时调用func(px),因为传入的是x的地址,所以此x就是确定的,更改指针所指位置的值,也就更改了x的值