zoukankan      html  css  js  c++  java
  • 为函数的参数分配内存空间

    1 void fun(char* c)
    2 {
    3 
    4   c = new int[10];
    5 
    6 }

    使用这个函数为参数c分配空间,但是实际上事与愿违,传递给fun的参数在外部未获得分配的空间。

    要想达到此目的,需要使用指针的指针或者指针的引用。

    1 void fun(char** c)
    2 {
    3 
    4   *c = new int[10];
    5 
    6 }
    1 void fun(char*& c)
    2 {
    3 
    4   c = new int[10];
    5 
    6 }

    原因:

    不管是传递的变量还是指针,都是按值传递,传递给函数的都是另一份拷贝,只不过变量时传递的变量自身,而指针是传递的这个指针自身的一份拷贝。所以可以改变指针指向内存的数据,但不能改变指针本身。

    但是如果按引用传递,则可以改变指针本身了。

    例如:

     1 void fun(char* c)
     2 {
     3     c = NULL;
     4     printf("%p\n",c);
     5 }
     6 
     7 
     8 int main()
     9 {
    10     char* c = (char*)malloc(2);
    11     fun(c);
    12     printf("%p\n",c);
    13 
    14     return 0;
    15 }

    结果应该是

    1 [ubuntu@root test]#./test
    2 (nil)
    3 0x80f8008
  • 相关阅读:
    并查集
    CCF201604-02
    作业八
    作业七
    数据结构--链队列基本操作
    数据结构--栈的基本操作
    eclipse配置maven
    软件架构
    scala lambda 表达式 & spark RDD函数操作
    spark(3)
  • 原文地址:https://www.cnblogs.com/cxjchen/p/3069025.html
Copyright © 2011-2022 走看看