下面的 employee.c 演示了如何在函数中通过malloc分配堆内存,并返回调用方。

为关注重点,把memset()和free()都省了。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct employee
{
    char name[8];
} emp;                    // 1、声明结构体,这是打算malloc的类型。

void create(emp** ppe, char* name);

int main(void)
{
    emp* pe = NULL;            // 2、定义结构体指针,等待malloc
    create(&pe, "Jack");        // 3、把结构体指针的地址做实参传给函数(pe取地址就是ppe)
    printf("Employee %s is here.\n", pe->name);
    return 0;
}

void create(emp** ppe, char* name)    // 4、形参接收结构体指针的地址(值传递)
{
    emp* pe = (emp*)malloc(sizeof(emp));
    strcpy(pe->name, name);
    *ppe = pe;            // 5、将malloc后的结构体指针赋值给解引用的形参(ppe解引用就是pe)
    //ppe = &pe;            // 6、严重错误!!!pe即将出栈,&pe就是个野指针!
                    //    另外,ppe作为形参,即便持有&pe,也不会改变实参的值。
                    //    记住!永远不要返回局部变量的地址。
}

运行结果如下:

posted on 2020-04-11 00:22  god with us  阅读(680)  评论(0编辑  收藏  举报