解决老大难疑惑:指针 vs 引用】的更多相关文章

▶疑问描述 1.  引用reference的本质: 常指针 ——> 什么时候用指针?= 就按Java中的引用变量那样用? ——> 什么时候用引用?  ①函数的入参/返回值时   ②T& p 为什么不直接用T* const  p ? ——> instance在程序中的传递?   典型的,被好几个类型的对象所引用?    以及函数调用时,作为函数入参/ 函数返回值的传递? ▶指针是什么; 变量名是什么 Rule1:  指针是一种基本数据类型(或者说一个泛型,它的参数类型是其指向的对象…
指针与引用  1. 指针 (1) 指针是一个变量(实体),存储的是一个地址,指向内存的一个存储单元,指针可以为空 (2) 指针可以为空,在声明定义时可以不初始化 (3) 指针在初始化之后可以重新指向其他的存储单元 (4) 指针可以有多级 (5) 指针使用时需要解引用 (6) sizeof指针得到的是指针本身大小(所指向的变量或对象的地址) (7) 指针的自增是地址的改变而不是指针所指向变量的改变 (8) 程序为指针变量分配内存区域 2. 引用 (1) 引用是原变量的一个别名,跟原来的变量实质是同…
  http://blog.csdn.net/thisispan/article/details/7456169 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名.  ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需要解引用: 3. 引用只能在定义时被初始化一次,之后不可变:指针可变: 引用"从一而终" ^_^ 4. 引用没有 const,指针有 const,const 的指针不可变:…
 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存,它的内容是所指内存的地址:引用是某块内存的别名.  ★ 区别: 1. 指针是一个实体,而引用仅是个别名: 2. 引用使用时无需解引用(*),指针需要解引用: 3. 引用只能在定义时被初始化一次,之后不可变:指针可变: 引用“从一而终” ^_^ 4. 引用没有 const,指针有 const,const 的指针不可变: 5. 引用不能为空,指针可以为空: 6. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针…
在看了一篇文章以后,http://coolshell.cn/articles/7992.html,说的是C和C++之间的缺陷,当然这篇文章说的非常高深了.所以就找了一些资料,分析了这两者的区别 在<Effective c++>一书中页介绍了关于指针和引用的区别.     值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值.函数的传值有两种,一个是值传递:一个地指针传递. 一.引用简介     引用就是某一变量(目标)的一个别名,对引用的操作与对变量直…
接着回顾函数.指针和应用. 函数 1.多维数组作为形参时,第一维的大小可以省略(也可以不省略),但是其他维的大小必须指定.比如二维数组形参,int array[3][]不正确,int arry[][10]正确.因为实参传来的是数组的起始地址,在内存中按行存放,但并不区分行和列,如果在形参中不指定列数,则系统无法确定应为多少行多少列. 2.在C++中,可以为参数指定默认值,在函数调用时,没有指定与形参相对应的实参就自动使用默认值.C++函数的默认参数可以是常数,也可以是全局变量或全局常量,甚至可以…
C++中共有四种存储类别标识符:auto/static/register/extern 1.auto 函数或分程序内定义的变量(包括形参)可以定义为auto(自动变量).如果不指定存储类别,则隐式定义为auto. 例如,函数类有如下定义: auto int x , y ; 等价于: int x , y ; 2.static 除了形参,可以将局部变量和全局变量定义为静态变量.用static标识符. static int a;//a是全局静态变量 f() {static int b = 1;}//b…
这波要针对上篇分析里 标红的问题(成员变量用 T,T&啥情况)继续思考, 要学习以下材料: 1. 知乎上:用指针还是引用 2. StackOverflow上的相关问题 https://stackoverflow.com/questions/12728794/why-should-i-use-reference-variables-at-all 3. Google:  What  is reference in Memory ;   When to use it; 4. String类型好像很特殊…
在写基于二叉排序树的查找时,分为三个过程 1.二叉排序树的插入 2.二叉排序树的建立 3.基于二叉排序树的查找 其中第三部可以递归方式实现,也可以用while循环解递归,于是我想也解解第一步的递归,看看行不行,结果给了我当头一棒,解递归失败! 最后我分析了一下原因: 首先看一下,原来递归的实现方式 typedef struct _TreeNode { struct _TreeNode *leftNode; struct _TreeNode *rightNode; TypeData data; }…
粘个代码占位置,以后有时间把指针函数,函数指针都补上 #include <iostream> using namespace std; void freePtr1(int* p1){ /*未释放内存前 -> p1 Address : 0012FDDC p1 value : 003429B8, 在这里,p1它也是一个变量,既然是一个变量, 那么它将会以值的传递,把外部变量p1传到栈内,在栈内产生一个地址:0012FDDC, 当然,它的值不会变仍然是指向堆地址:003429B8 .*/ de…