zoukankan      html  css  js  c++  java
  • 实现动态内存传递

     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 }
  • 相关阅读:
    【转载】$.ajax()方法详解
    【转载】"从客户端中检测到有潜在危险的 Request.Form 值"的解决方案汇总
    jQuery获取select的选中项value和text
    AIDL
    SAX
    AsyncTask
    Handler
    ViewSwitch
    TabActivity
    AlarmManager
  • 原文地址:https://www.cnblogs.com/xuxu8511/p/2650196.html
Copyright © 2011-2022 走看看