c++函数中的指针参数与地址参数区别介绍
2012-11-12 12:05
447 查看
比如 一个函数 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++中地址和引用不是一个东西!!!
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++中地址和引用不是一个东西!!!
您可能感兴趣的文章:
相关文章推荐
- 实例代码(栈地址增长方向、vtable对类size的影响、对象最小size概念、结构体对齐规则(对齐参数)、sizeof(指针),free与delete的区别)
- 汇编分析参数传递中的地址传递与值传递的区别(指针,引用,值传递)
- c++函数中的 指针参数跟地址参数区别
- C和C++中指针与地址的区别
- [转载]C++中引用与指针的区别(详细介绍)
- C++中传值参数和引用参数和指针怎样区别?
- C语言 内存分配 地址 指针 数组 参数 实例解析
- objective-c 函数参数 传地址 传指针
- 指针简单介绍以及指针作为函数参数的例子
- C语言 内存分配 地址 指针 数组 参数 实例解析
- 关于函数参数中有指针无法带出地址
- 指针和地址的区别
- c语言 指针与地址的区别
- 详细介绍=====c++中的引用与指针的区别
- C和C++中指针与地址的区别
- 关于sklearn.svm.SVC与.NuSVC的区别以及参数介绍
- C++ 参数指针传递、引用传递、值传递的区别
- 详解C++中指针(*)、取地址(&)、解引用(*)与引用(&)的区别 (完整代码)
- C语言 内存分配 地址 指针 数组 参数 解析
- 一级指针、二级指针做函数参数的区别