关于指针的引用与指针的指针的理解
来源:互联网 发布:电脑版淘宝怎么找微淘 编辑:程序博客网 时间:2024/05/16 05:15
今天上午在学习数据结构的过程中,写了一段错误的代码,找了一上午的错误才发现是因为用错了指针的问题,错误的关键点是:将指针当做形参其实也是值的传递,在在副本中改变了指针变量的内容,即函数内部改变了指针的指向,在函数外部指针的指向并没有改变。这种情况下应该要用双重指针或指针的引用作为形参。多说无益,直接上代码。
#include <iostream>using namespace std;void f1(int *a)//错误方法{int *s=new int;*s=1;a=s;}void f2(int **b){int *s=new int;*s=2;*b=s;}void f3(int* &b){int *s=new int;*s=3;b=s;}int main(){int *a;a=NULL;f1(a);cout<<*a<<endl;f2(&a);cout<<*a<<endl;f3(a);cout<<*a<<endl;return 0;}我的本意是在main中定义一个int*的变量,然后在f()函数中申请一块内存,让这个变量指向这块内存。最开始的想法就是f1()函数,然而当执行完f1()函数,然后输出时提示运行错误,仔细分析一下,这里肯定会出现运行错误,f1()函数形参的a是main()中a的一个副本,都是一个指针变量,main()中的a指向NULL,f1()中的a最开始也指向NULL,然而函数内部申请一一块内存s,并让a指向了s。再回到main()函数中,此时输出a的内容当然会提示运行错误,因为a指向的是一个NULL,没有内容。main()的a只分配了a的空间,而没有分配*a的空间;
要想做到在函数内部改变指针的指向,在函数外部也能得到更新,就必须使用双重指针或者指针的引用。先来谈谈双重指针,也就是指针的指针,看看f2()函数,形参是一个双重指针,实参是一个指针变量的地址,b的内容装的是main中a的地址,而a的内容也是一个地址,刚开始指向NULL,在f2()中申请了一块内存s,,*b即是a指向是同一块内存,改变*b的内容就是改变了a的内容;
再来说说指针的引用,如果b是a的引用,则a和b指是同一块内存,f3()中,b是一个int*变量的引用,是a的引用,即b和a是同一块内存空间,改变b的内容(b的指向)就是改变a的内容(a的指向)。
0 0
- 关于指针的引用与指针的指针的理解
- 指针与指针的引用
- 指针与指针的引用
- 指针与指针的引用-
- 指针与指针的引用
- 指针理解,_out pointer 指针的指针 指针引用
- 关于指针的引用
- 关于指针的引用
- 关于指针的引用*&
- 关于引用与指针,引用的实现
- 指针、指针的引用
- 指针 指针的引用 指针的指针
- 引用与指针的一点理解
- 关于指针的理解
- 引用、指针的指针、指针的引用
- 理解“指针的指针”
- 指针的指针理解
- 指针的引用与指针的区别。
- 孕期饮食 切不可多吃甜食
- 图表制作软件下载地址汇总
- 【2016中国合伙大会专题回顾之欢迎晚宴,其乐融融】
- 欢迎使用CSDN-markdown编辑器
- 数据库常用语句-去重
- 关于指针的引用与指针的指针的理解
- 火焰检测算法 fire detectf方法 vs2010+opencv2.4.11
- 各大媒体盛赞 “艺术家眼中的新三峡”大型采风活动
- 紫燕ETL系统技术框架
- View阴影效果
- vs2015+c#实现activex的开发,签名,部署
- 关于进度条的操作
- 团体程序设计天梯赛-练习集 L1-025. 正整数A+B
- 站长工具之时间戳转换日期格式