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++在函数中修改指针值相关推荐

  1. 学习旧岛小程序 (5) observer 函数中修改属性的值

    不要在一个属性的 observer  函数中修改属性的值 不然会造成内存泄露 错误代码: properties: {/* 期刊号 */index: {type: String,observer: fu ...

  2. c语言实现函数给主函数中的指针赋值的方法

    //利用二维指针.自从学了c之后,还没怎么用过二维指针,这么算是记住了 /* c语言实现函数给主函数中的指针赋值的方法*/#include<stdio.h>void f (int **p) ...

  3. JavaScript - 在函数中修改参数值、用对象实例作为参数传递修改参数

    <html><head><head><body><script language="javascript">// 在函数 ...

  4. 主函数中调用返回值为void的函数,函数的参数传递规律

    参数为基本类型(int/char/-) public static void main(String[] args){      int a=0;      hs(a);      System.ou ...

  5. c语言在函数中传递指针,[求助]关于文件指针在函数中传递的问题

    [求助]关于文件指针在函数中传递的问题 我写的一个程序中文件指针在各函数间传递.请各位整理一下思路. /*=============================================== ...

  6. c语言函数中使用指针变量,C语言函数指针变量

    C语言函数指针变量 导语:在C语言中规定,一个函数总是占用一段连续的内存区, 而函数名就是该函数所占内存区的首地址. 这就是函数指针变量.下面是相关介绍,仅供参考! 在C语言中规定,一个函数总是占用一 ...

  7. 函数中的指针分配的内存怎么释放

     被调用函数里动态分配的内存要不要手动释放 20 我想手动释放来着,但是指针是在被调用函数里声明的,在调用函数里释放不了. 我的被调用函数返回的就是这个指针,我也不能在被调用函数里释放. 你指的& ...

  8. python一个函数调用另一个函数的返回值_在另一个函数中使用返回值

    所以我认为当你调用check_channel_number函数时,user_channel_number是在那里定义的,所以当你调用delete_events函数时,它已经超出了范围,也许这样会有帮助 ...

  9. 在函数中修改成员变量字符串和数组,它们的值会发生变化吗

    题目:阅读下面的代码,写出输出结果_____ public class Main {String str = new String("beijing");char[] ch = { ...

最新文章

  1. Uipath 学习栏目基础教学:4Uipath 循环语句
  2. java基础----线程
  3. c语言dll注入器,Module Injector-Module Injector(DLL动态库注入器)下载 v1.0--pc6下载站
  4. Scrapy将爬取的段落整合为字符串
  5. 31. 脱壳篇-什么是壳
  6. linux脚本awk,如何在awk脚本中使用shell变量?
  7. 【语言处理与Python】4.7算法设计
  8. 易懂的比特币工作机理详解
  9. cmos逻辑门传输延迟时间_终于有人能把常用的三种电平:TTL、CMOS、RS232电平讲明白了...
  10. 【Linux】一步一步学Linux——ssh-keygen命令(178)
  11. 绍耕反失败学课程(01)— —人生只做一件事
  12. 举个栗子!Tableau技巧(9):Lisa教你巧妙制作混合地图
  13. php七牛云,php七牛云
  14. 修改weblogic服务器ip地址,修改weblogic服务器ip地址
  15. 初等矩阵的逆矩阵如何“一眼就能看出”
  16. Aurelia历险记:创建自定义PDF查看器
  17. Kubernetes详解
  18. 在家就能拍,韩系证件照拍摄教程
  19. ds18b20温度转换指令_DS18B20传感器温度转换指令( )。
  20. c 语言字符型转换为整形,高楼平地起!C语言数据的两种类型转换

热门文章

  1. 参与橄榄山的虚拟开发团队, 既学习开发又有研发项目经费
  2. 中国羽绒服行业何时诞生第二个“波司登”?
  3. 掌控全球——三星EVDO系列手机领“秀”登场
  4. 第八篇 - 手写Redis(Java实现)
  5. 车载电台天线按装示意图
  6. 明星产品!种质资源数字化一站式解决方案!
  7. Asch PK Lisk系列之一:安全性
  8. jquery插件——form表单插件
  9. 【C++】原神角色管理系统——基于vs的系统开发
  10. 依赖项安全检测新利器:Scorecard API