指针的指针和指针的引用
来源:互联网 发布:淘宝退货金额改0元吗 编辑:程序博客网 时间:2024/05/16 04:05
1,使用指针的指针和指针的引用的原因
当我们把一个指针做为参数传一个方法时,其实是把指针的复本传递给了方法,也可以说传递指针是指针的值传递。如果我们在方法内部修改指针会出现问题,在方法里做修改只是修改的指针的copy而不是指针本身,原来的指针还保留着原来的值。我们用下边的代码说明一下问题:
int m_value = 1;void func(int *p){ p = &m_value;}int main(int argc, char *argv[]){ int n = 2; int *pn = &n; cout << *pn << endl; func(pn); cout << *pn <<endl; return 0;}
看一下输出结果
输出的是两个2。
结论:
1. 函数的返回值是指针类型的,检查是静态内存指针还是堆内存指针还是栈内存指针,栈内存指针是绝对要不得滴!
2. 函数需要使用指针参数进行传入传出的,在函数中只能对指针的指向的值(*p)进行修改,而不能修改指针指向,也就是指针地址!(函数中不得修改指针参数的地址,否则请使用指针的指针!)
使用指针的指针
展示一下使用指针的指针做为参数:
int m_value = 1;void func(int **p){ *p = &m_value; // 也可以根据你的需求分配内存 *p = new int; **p = 5;}int main(int argc, char *argv[]){ int n = 2; int *pn = &n; cout << *pn << endl; func(&pn); cout << *pn <<endl; return 0;}
输出2 和5
我们看一下 func(int **p)这个方法
p: 是一个指针的指针,在这里我们不会去对它做修改,否则会丢失这个指针指向的指针地址
*p: 是被指向的指针,是一个地址。如果我们修改它,修改的是被指向的指针的内容。换句话说,我们修改的是main()方法里 *pn指针
**p: 两次解引用是指向main()方法里*pn的内容
指针的引用
nt m_value = 1;void func(int *&p){ p = &m_value; // 也可以根据你的需求分配内存 p = new int; *p = 5;}int main(int argc, char *argv[]){ int n = 2; int *pn = &n; cout << *pn << endl; func(pn); cout << *pn <<endl; return 0;}
输出还是2和5
看一下func(int *&p)方法
p: 是指针的引用,main()方法里的 *pn
*p:是main()方法里的pn指向的内容。
/这部分是关于指针的引用&的说明*、
指针的引用,相当于传递的是: 指针的指针, 这样指针的数值是可以改变的
而单传递指针,不传递指针的引用,那么指针指向的数据是可以改变,而指针本身是不可以改变的
fun(int * pA); // pA的数值在函数返回后不会变化
fun(int*& pA); // pA的数值在函数返回可能会发生变化,如果fun函数内部对pA赋值的话
void InitStack(LNode* & HS)
{
HS = NULL; // 函数返回后, HS就是NULL了
}
void InitStack(LNode* HS)
{
HS = NULL; // 函数返回后, HS依然是传递进来的数值
}
*/
By Northow:
简单讲,*&指针本身可变;
*指针本身不变,仅指向的内容可变。
参考:http://www.cnblogs.com/li-peng/
- 指针的指针和指针的引用
- 指针的指针和指针的引用
- 指针的指针和指针的引用
- 指针和指针的引用
- 指针和指针的引用
- 指针,和指针的引用
- 指针和指针的引用
- 指针、指针的引用
- 指针 指针的引用 指针的指针
- 引用、指针的指针、指针的引用
- 指针型形参和指针引用的传递
- 指针和指针引用的区别
- C++中的指针和指针的引用
- 指针的的指针和指针的引用
- 指向指针的指针 和 指针的引用
- 详解c++指针的指针和指针的引用
- 指向指针的引用和指向指针的指针
- 关于指针的指针和指针的引用
- 在CentOS 7.0 上安装Redis 3.0.3
- springmvc使用ssi-uploader批量上传图片及后台接受
- TCP/IP、Http、Socket的区别
- MVC模式心得
- Linux对mysql5.5.2进行自动安装
- 指针的指针和指针的引用
- Nignx基本操作(启动、停止、重启)以及信号控制
- js 中 || 和 &&
- 分布式-集群模式-微服务
- 金融tag对照表
- swoole安装基本配置
- JavaScript权威指南--基础篇3
- Android中allowBackup属性的含义和危险性实例讲解
- 揭秘信用卡账单、支付宝背后的黑色产业链