c++函数中的 指针参数跟地址参数区别

来源:百度知道 编辑:UC知道 时间:2024/06/03 01:56:02
比如 一个函数 chat(link &a);
chat(ling *a);
前者引入一个地址做形参 是不是可以把一个指针变量p。。
这么用chat(p);

那跟第二个函数 有什么区别呢 都是传地址啊。。
小弟弄不明白~~

chat(int&a);
chat(int *a);
这两个函数是完全不同意义的东西,你的理解主要是在int&a和int* a这个类型上面。要注意int&和int*是两个完全不同的类型。int&是引用类型,而int*是指向int类型变量的指针类型。
void chat(int&a)
{
a=20;
}
调用此函数:

int x=100;
chat(x); // 此时x的值变为20了

如果函数如下:
void chat (int*a)
{
*a=20;
}
调用:
int x=10;
chat(&x); //此时x的值也会变为20;

这是他们有联系的地方,也就是他们都可以在函数里面改变外面变量的值,但是这两个的参数传递方式是不一样的void chat(int&a)这个函数是引用传递,而void chat(int*a);这个函数是值传递(虽然其传递的值是地址值,但是还是值传递)。
这个引用类型应该怎么理解呢? 我是这样理解的:int a=100;那么a到底是个什么东西,我们说a使我们定义的一个变量,那么变量又是个什么东西呢,不知道你有没有想过,我们不谈编译原理,但是你可以将a看成是这么一个东西,a代表了一块内存空间,注意:是一块内存空间,也就是说这一块内存空间可能由一个或多个字节组成,那么在VC++ 6.0中,int类型的变量占4个字节,所以a代表了4个字节的连续的内存空间。那么int &b=a;定义了这一句之后,b和a一样都代表了那4个字节的内存空间了。再看看int *c=&a;此时c是什么呢?c也代表了一块内存空间,在VC ++6.0中int*类型的变量占4个字节的内存空间,所以c代表了一个连续的4个字节的内存空间,在其内部放的值就是a代表的那块内存空间的第一个字节的地址值。

所以我们向chat(int&a)传递参数的时候例如chat(x)此时a与x同样代表一块内存空间,而chat(int*a)调用的时候:chat(&x);此时a里面的值就是&x,也就是x代表的内存的首地址。

所以你要