您的位置:首页 > 其它

指向指针的指针的一种用法

2015-07-26 23:01 169 查看
这篇文章主要是介绍 指向指针的指针 的一种用法

所以这里不谈指针或指向指针的指针他们的基础

 

直接上代码(用途:使用一个函数动态申请内存,并赋值。跳出调用函数后输出赋值内容)

[cpp] 

#include <stdio.h>  

#include <stdlib.h>  

  

typedef struct Data  

{  

    int    da;  

} Data;  

  

void fun(Data *p);  

  

int main()  

{  

    Data    *d;  

    fun(d);  

    printf("%d", d->da);  

    return    0;  

}  

  

void fun(Data *p)  

{  

    p = (Data*)malloc(sizeof(Data));  

    p->da = 2;  

}  

我建议你直接运行看看结果,你会发现运行出错,在这里我建议你先思考再往下看

那么再看看下面的这段代码:

[cpp]  

#include <stdio.h>  

#include <stdlib.h>  

  

typedef struct Data  

{  

    int    da;  

} Data;  

  

void fun(Data **p);     //这里改动了  

  

int main()  

{  

    Data    *d;  

    fun(&d);     //这里改动了  

    printf("%d", d->da);  

    return    0;  

}  

  

void fun(Data **p)     //这里改动了  

{  

    (*p) = (Data*)malloc(sizeof(Data));     //这里改动了  

    (*p)->da = 2;     //这里改动了  

}  

 

仔细看就不难发现改动后的代码使用了指向指针的指针

为什么直接使用指针会不行呢?www.2cto.com

因为第一段代码里 void fun(Data *p) 中参数是按值传递。调用函数自动定义一个临时变量存储了实参的拷贝,那么在fun中动态分配的内存,根本就不是在main函数中指针变量d 所指向的,main中指针变量d 从头到尾都是未定义的。

如何解决这个问题?

用指向指针的指针,把main中指针变量d 的地址传进去。这样在fun中分配的内存空间地址就存放在指针变量d 中

 

说到这里,指向指针的指针其中的一个作用就不言而喻了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: