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

比如 一个函数 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代表的内存的首地址。

所以你要明白,他们不是传递的都是地址!!!!! 在C++中地址和引用不是一个东西!!!
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-09-27
地址参数存在栈中,指针存在堆中
第2个回答  2009-11-09
第一个参数是一个link类型的引用,而不是地址形参
引用传递指向实参,不产生副本
指针传递产生一个指针副本,该指针指向实参
普通参数产生一个副本,该副本保存了实参的值
第3个回答  2009-11-09
你要明白指针就是地址这个概念,其实, 指针就是一类变量,是一类包含了其他变量或函数的地址的变量。与其他变量所不同的是,一般的变量包含的是实际的真实的数据,而指针是一个指示器,它告诉程序在内存的哪块区域可以找到数据。
因此,你所引用的第一个函数中的参数&a,本身就是一个指针,所以跟第二个函数中的是一样的
第4个回答  2009-11-09
两个函数的声明不一样的,
第一个是以一个link类型的引用作为函数参数。
第二个是以一个link类型的指针作为参数,这个是传地址。
相似回答