传指针和传指针引用的区别/指针和引用的区别(
指针:(通俗理解即为一个变量在内存中的编号(地址))
例1:int b = 2;
int *p = &b;
以上例子就是将b变量在内存中的地址赋值给这个指针变量p, 意味着p的值就是变量b的地址。
指针变量:自己的值(指针变量本身的内容)是某个变量的地址
例1中的p就是指针变量
变量值:变量本身在内存中一定单元中bit组合的数据表示
变量值就是该变量本身的值例1中的b的变量值就是2,p的变量值就是(b的地址)
变量地址:即使指针(指针就是一个地址,地址就是指针)
例1中的p的值就是变量地址, 例1中:&b也是变量地址,&为取地址符号
在明白上面的每个概念后那么你的问题“传指针和传指针引用的区别/指针和引用的区别”就好回答了。
传指针:就是将例1中的p或者&b作为一个函数的实参发送给形参
传指针引用:就是把例1中的指针变量p(即使&p)的地址作为一个函数的实参。
注意上面的&p你会问这个什么意思? 你应该只是&为取地址运算符号。被&运算的对象必然是一个变量,那么你要明白一件事情我没在例1中写(&b )你应该明白把变量b的地址取出来,那么(&p)也是一样的道理,对没有错就是取出指针变量p的地址, 切记哦指针变量也是变量哦! 它和普通的变量没什么区别,只不过它是用来保存某个变量的地址罢了。你看例1中的int *p = &b 可不就是把一个普通的int类型的变量的地址赋值给p指针变量了么。
那么关键问题就是“传指针和传指针引用的区别”
本质上没有区别,
还是在例1的基础上加上以下代码:
函数1:void fun1(int *p)//这里写*p就是说这个形参值接受一个int类型变量的地址
{
}
函数2:void fun2(int **p)
{
int q = 3;
}
下面我们用指针传递 调用这个fun1函数:
void fun1(&b);//
调用后b的值变成了1
下面我们用指针引用传递 调用这个fun2函数:
void fun2(&p);//这里写&p意味着被调用函数是应该是接受一个【指针变量】的地址的(即传指针引用)
调用后p的值变成了某个变量的地址
好了总结一下:
指针传递:发送了一个变量的地址, 接受这个地址的函数可以利用这个地址找到这个变 量进行操作。
指针引用传递:发送了一个指针变量的地址, 接受这个指针变量地址的函数可以利用这个地址找到这个指针变量进行操作。