• 实现动态内存传递


     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 void fun(char *q){
     6     q = new char;
     7 }
     8 int main(int argc, char* argv[])
     9 {
    10     char *p = NULL;
    11     fun(p);
    12     cout << p << endl; //运行报错,内存不能访问
    13 }

    原因说明:

      在参数传递时,由*q = p的过程,实际上是在函数fun中局部变量q指向p的内存,然后再对q指向其他申请的内存,但是p的指向一直都没有变。

    解决方法:

    1、两级指针

       

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 void fun(char **q){
     6     *q = new char;
     7 }
     8 int main(int argc, char* argv[])
     9 {
    10     char *p = NULL;
    11 
    12     fun(&p);
    13 
    14     cout << p << endl;
    15 }

    2、指针的引用 (我更喜欢第二种

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 void fun(char *&q){
     6     *q = new char;
     7 }
     8 int main(int argc, char* argv[])
     9 {
    10     char *p = NULL;
    11 
    12     fun(p);
    13 
    14     cout << p << endl;
    15 }
  • 相关阅读:
    [NOI2001]炮兵阵地
    POJ 2411 Mondriaan's Dream
    【模板】割点(割顶)
    [Noip2007]Core树网的核
    2018.09.09模拟总结
    2018.09.08模拟总结
    [USACO11JAN]Roads and Planes
    最优贸易
    [USACO08JAN]Telephone Lines
    Calabash(葫芦娃)
  • 原文地址:https://www.cnblogs.com/xuxu8511/p/2650196.html
Copyright © 2020-2023  润新知