首页 > C > 函数 阅读:57,774

实参是指针,如何在函数内部改变指针

< 上一页 数组做函数参数 调用约定 下一页 >

了解了函数传参的3种方式之后,现在来讨论一个问题,就是如果指针做实参,要在函数内部改变指针,应该怎么传参呢?

比如下面这段代码:

int main(void)

{

    char *p = NULL;

    get_memory();//如何定义get_memory函数和传参p

    strcpy_s(p, 100,”hello world”);

    printf(%s\n, p);

    free(p);

    p=NULL;

}

我们需要实现一个get_memory的函数,为main函数中的实参p分配一段100字节的内存,然后用来拷贝字符串”hello world”。这个过程,实际上就是在修改指针p的值(地址),以为开始p的值为NULL,通过get_memory函数分配内存之后,指针的值就是堆上的一个分配的内存地址。这个时候,指针作为实参,要修改实参,必须传实参的地址或者引用,也就是需要传指针的地址(也就是二级指针),或者指针的引用。

因此get_memory函数设计如下:

1,传指针的指针(二级指针):

void get_memory(char **p)

{

    *p=(char *)malloc(100);

}

调用方式:

get_memory(&p);

2,传指针的引用:

void get_memory(char *&p)

{

    p=(char *)malloc(100);

}

调用方式:

Get_memory(p);

< 上一页 数组做函数参数 调用约定 下一页 >

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注