zoukankan      html  css  js  c++  java
  • 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,也不会改变实参的值。
                        //    记住!永远不要返回局部变量的地址。
    }

    运行结果如下:

  • 相关阅读:
    linux常用命令三
    linux常用命令二
    redis持久化
    Linux环境redis集群搭建
    Maven常用命令
    Maven生成项目站点
    maven中import scope依赖方式解决单继承问题的理解
    maven使用assembly打包tar.gz文件
    Apache CXFjar包目录(转)
    WebService学习笔记一
  • 原文地址:https://www.cnblogs.com/godwithus/p/12677205.html
Copyright © 2011-2022 走看看