返回顶部

收藏

C语言的联合与结构体内存分配小例子

更多

通用平台(在Linux,Windows下都测试通过),使用的是GCC。

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

struct S_Person {
    char * name;
    int age;
} person, *p;

union U_Person {
    char * name;
    int age;
} u_person, *u_p;

int main(void) {

    p = (struct S_Person *) malloc(sizeof(struct S_Person));
    if (p == NULL ) {
        exit(1);
    }
    p->age = 10;
    printf("age = %d\\n", p->age);

    p->name = (char *) malloc(sizeof(char) * 20);
    if ( p->name == NULL )
    {
        exit(1);
    }
    sprintf(p->name, "%s", "杨志永");
    printf("name = %s\\n", p->name);

    //释放内存的顺序与分配内存的顺序相反。不论是多少层次
    free(p->name);
    free(p);
    p = NULL;

    u_p = (union U_Person *) malloc(sizeof(union U_Person));
    if ( u_p == NULL )
    {
        exit(1);
    }
    u_p->age = 20;
    printf("union age = %d\\n", u_p->age);

    u_p->name = (char *) malloc(sizeof(char) * 20);
    if ( u_p->name == NULL )
    {
        exit(1);
    }
    sprintf(u_p->name, "%s", "yangzhiyong");
    printf("union name = %s\\n", u_p->name);

    //释放内存的顺序与分配内存的顺序相反。不论是多少层次
    free(u_p->name);
    free(u_p);
    u_p = NULL;

    return EXIT_SUCCESS;
}
//该片段来自于http://outofmemory.cn

标签:c++,基础

收藏

0人收藏

支持

0

反对

0

相关聚客文章
  1. 博主 发表 2011-11-03 16:00:00 C++ 语言基础
  2. thinkpc 发表 2016-03-04 13:55:30 c++&nbsp;11 map基础value排序
  3. linux@linux.cn (linu 发表 2016-11-04 02:37:00 C++ 程序员 Protocol Buffers 基础指南
  4. pansunyou 发表 2014-11-30 02:51:00 C++通用跨数据库访问方案之一: 基础组件cdbc
  5. tanglei 发表 2014-05-28 15:08:01 struct与class区别联系
  6. 博主 发表 2016-06-28 05:17:59 Bazel C++ 基础[翻译]
  7. linux@linux.cn (linu 发表 2016-04-24 02:13:43 基础 JavaScript 装逼指南
  8. 博主 发表 2016-04-28 07:31:22 C++-内存区域
  9. 博主 发表 2016-05-06 00:40:04 大数据实验室(大数据基础培训)——基础概念
  10. 博主 发表 2016-01-06 00:00:00 统计学——基础概念
  11. Sailor 发表 2016-05-26 18:00:00 VC++开发GIS系统(193)删除线之IO函数实现
  12. linux@linux.cn (linu 发表 2016-06-03 06:42:02 21天速成 C++?编程生涯的一点思考

发表评论