• C语言,在函数中malloc,关注实参与形参


    下面的 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.
    ", 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,也不会改变实参的值。
                        //    记住!永远不要返回局部变量的地址。
    }

    运行结果如下:

  • 相关阅读:
    static 关键字
    gitlab 配置到jenkins
    Eclipse下代码字体背景变红/变绿/变黄原因
    构造方法(和python初始化变量类似)
    面向对象(实际就像python跳用自己写的库那样)
    Python 的AES加密与解密
    break 和 continue 的用法
    for循环
    Eclipse快捷键
    java三元运算符
  • 原文地址:https://www.cnblogs.com/godwithus/p/12677205.html
Copyright © 2020-2023  润新知