C++在函数中修改指针值
main函数中声明一个指针,在函数中修改该指针的值,希望永久修改指针值应如何做???
错误案例:
void a(int* p1) {int c = 1;int* b = &c;p1 = b;cout << *p1 << " " << endl;int a = 1;
}
int main(){int c = 10;int* p = &c;cout << *p << endl;a(p);cout << *p << endl;
}
输出结果如下:
可以看出,值并未发生改变,但是在函数中指针值确实发生了改变。这里是为什么呢,因为在指针p作为参数传递到函数a中时,会对该指针做一个拷贝,也就是说在函数a中的p1并不是main函数中的p而是p的一个拷贝,因此在a函数中,将p1的指向修改为c但是main函数中的p的指向并未修改。从以下输出可以证实我们的分析。
void address(int* p1) {/*cout << &p << endl;*/cout << &p1 << endl;
}int main()
{int c = 10;int* p=&c;cout << &p << endl;address(p);}
解决方案
第一种:
void a(int* p1) {/*int c = 1;int* b = &c;*//*p = b;cout << *p << endl;*/*p1 = 1;
}
int main()
{int c = 10;int* p=&c;cout << *p << endl;a(p);cout << *p << endl;
}
下面分析一下为什么生效,在进入函数a中之后,复制了一个指针p1与p指向同一片内存空间,然后通过p1=1将p1所指向的内存空间的值改为1,这是修改了内存空间中的值,因此在main函数中输出p发现发生了同样的改变。
第二种:
void a(int* &p1) {int c = 1;int* b = &c;p1 = b;cout << *p1 << endl;
}int main()
{int c = 10;int* p=&c;cout << *p << endl;a(p);cout << *p << endl;
}
下面分析为何生效,因为这里传递的时p的引用,通过输出可以看出,函数address中的p与main函数中的p其实是同一个变量。
void address(int* &p) {/*cout << &p << endl;*/cout << &p << endl;
}int main()
{int c = 10;int* p=&c;cout << &p << endl;address(p);}
C++在函数中修改指针值相关推荐
- 学习旧岛小程序 (5) observer 函数中修改属性的值
不要在一个属性的 observer 函数中修改属性的值 不然会造成内存泄露 错误代码: properties: {/* 期刊号 */index: {type: String,observer: fu ...
- c语言实现函数给主函数中的指针赋值的方法
//利用二维指针.自从学了c之后,还没怎么用过二维指针,这么算是记住了 /* c语言实现函数给主函数中的指针赋值的方法*/#include<stdio.h>void f (int **p) ...
- JavaScript - 在函数中修改参数值、用对象实例作为参数传递修改参数
<html><head><head><body><script language="javascript">// 在函数 ...
- 主函数中调用返回值为void的函数,函数的参数传递规律
参数为基本类型(int/char/-) public static void main(String[] args){ int a=0; hs(a); System.ou ...
- c语言在函数中传递指针,[求助]关于文件指针在函数中传递的问题
[求助]关于文件指针在函数中传递的问题 我写的一个程序中文件指针在各函数间传递.请各位整理一下思路. /*=============================================== ...
- c语言函数中使用指针变量,C语言函数指针变量
C语言函数指针变量 导语:在C语言中规定,一个函数总是占用一段连续的内存区, 而函数名就是该函数所占内存区的首地址. 这就是函数指针变量.下面是相关介绍,仅供参考! 在C语言中规定,一个函数总是占用一 ...
- 函数中的指针分配的内存怎么释放
被调用函数里动态分配的内存要不要手动释放 20 我想手动释放来着,但是指针是在被调用函数里声明的,在调用函数里释放不了. 我的被调用函数返回的就是这个指针,我也不能在被调用函数里释放. 你指的& ...
- python一个函数调用另一个函数的返回值_在另一个函数中使用返回值
所以我认为当你调用check_channel_number函数时,user_channel_number是在那里定义的,所以当你调用delete_events函数时,它已经超出了范围,也许这样会有帮助 ...
- 在函数中修改成员变量字符串和数组,它们的值会发生变化吗
题目:阅读下面的代码,写出输出结果_____ public class Main {String str = new String("beijing");char[] ch = { ...
最新文章
- Uipath 学习栏目基础教学:4Uipath 循环语句
- java基础----线程
- c语言dll注入器,Module Injector-Module Injector(DLL动态库注入器)下载 v1.0--pc6下载站
- Scrapy将爬取的段落整合为字符串
- 31. 脱壳篇-什么是壳
- linux脚本awk,如何在awk脚本中使用shell变量?
- 【语言处理与Python】4.7算法设计
- 易懂的比特币工作机理详解
- cmos逻辑门传输延迟时间_终于有人能把常用的三种电平:TTL、CMOS、RS232电平讲明白了...
- 【Linux】一步一步学Linux——ssh-keygen命令(178)
- 绍耕反失败学课程(01)— —人生只做一件事
- 举个栗子!Tableau技巧(9):Lisa教你巧妙制作混合地图
- php七牛云,php七牛云
- 修改weblogic服务器ip地址,修改weblogic服务器ip地址
- 初等矩阵的逆矩阵如何“一眼就能看出”
- Aurelia历险记:创建自定义PDF查看器
- Kubernetes详解
- 在家就能拍,韩系证件照拍摄教程
- ds18b20温度转换指令_DS18B20传感器温度转换指令( )。
- c 语言字符型转换为整形,高楼平地起!C语言数据的两种类型转换