4.2 结构(struct) 与共用体(union)
2013-11-08 14:47
423 查看
概念性的东西就没必要多说了,想必有一定的C基础都会知道结构体和共用体,当然这个不是我这次的重点,重点是程序员经常使用的!
1 结构体说白了,就是将不同的类型组装起来,组装以后一般作为参数传递给函数(在C中要注意结构体一般初始化结构体,经常使用到malloc 分配空间,在bzero 基本就ok啦),当然也可以让函数返回一个结构体哈。待会可以贴一个C的例子参考(呵呵。学习C++貌似自己在回味c了呢
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif)
)!
头文件
也算一个数据结构哈!来看看吧,使用结构体 头文件来了哈!(学习时候写的,所以你懂的。。。。。)
实现
ok ,结构体使用就这些了哈!
2 共用体 待续
共用体和结构体还是不太一样哈,结构体可以存储不同的类型,而结构体只可以存储其中的一种类型。
上次同学还在讨论共用体问题,所以自己还是记得清楚,此时注意strut 和union的大小问题(由于公用体每次都只能存储一个值{int long 或 double},所以为最大成员长度),同时应该注意union是在编译运行时分配大小的哦!
根据上面的几点,你应该可以,知道union 可以节约内存就可以了哈,说真的自己感觉使用的还是非常少。
1 结构体说白了,就是将不同的类型组装起来,组装以后一般作为参数传递给函数(在C中要注意结构体一般初始化结构体,经常使用到malloc 分配空间,在bzero 基本就ok啦),当然也可以让函数返回一个结构体哈。待会可以贴一个C的例子参考(呵呵。学习C++貌似自己在回味c了呢
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif)
)!
头文件
也算一个数据结构哈!来看看吧,使用结构体 头文件来了哈!(学习时候写的,所以你懂的。。。。。)
#ifndef _ALIST_ #define _ALIST_ #include <stdio.h> #include <stdlib.h> #include <strings.h> #define SIZE 10 #define DATA 0 #define OFFSET 1 #define HEAD 0 #define TAIL -1 typedef int data_t; typedef struct alist{ data_t data[SIZE]; int num; }ALIST; ALIST *creat_alist(void); void init_alist(ALIST *L); int is_full(ALIST *L); int is_null(ALIST *L); void insert_alist(ALIST *L, data_t data, int offset); int find_alist(ALIST *L, data_t data); void delet_alist(ALIST *L, data_t data, int flage); void sort_alist(ALIST *L, int flage); void show_alist(ALIST *L); #endif
实现
#include "alist.h" ALIST *creat_alist(void) { ALIST *L = (ALIST *)malloc(sizeof(ALIST)); if(NULL == L) exit(-1); bzero(L, sizeof(ALIST)); L->num = -1; return L; } void init_alist(ALIST *L) { bzero(L, sizeof(ALIST)); L->num = -1; } int is_full(ALIST *L) { return L->num == SIZE-1?1:0; } int is_null(ALIST *L) { return L->num == -1?1:0; } void insert_alist(ALIST *L, data_t data, int offset) { int n = L->num+1; switch(offset) { case HEAD: while(n--) L->data[n+1] = L->data ; L->data[0] = data; L->num++; break; case TAIL: L->data[L->num+1] = data; L->num++; break; default: if(0 > offset) insert_alist(L, data, HEAD); else if(L->num < offset) insert_alist(L, data, TAIL); else { while(n-- > offset) L->data[n+1] = L->data ; L->data[offset] = data; L->num++; } break; } } int find_alist(ALIST *L, data_t data) { int i = 0; for(;i <= L->num; i++) if(data == L->data[i]) return i; return -1; } void delet_alist(ALIST *L, data_t data, int flage) { int n; int i; switch(flage) { case DATA: if(0 > (n = find_alist(L, data))) return; else { for(i = n; i < L->num; i++) L->data[i] = L->data[i+1]; L->num--; } break; case OFFSET: if(data < 0 || data > L->num) return; else { n = data; while(n++ < L->num) L->data[n-1] = L->data ; L->num--; } break; default: break; } } void sort_alist(ALIST *L, int flage) { // if(flage == UP?a[i] > a[i+1]:a[i] < a[i+1]) } void show_alist(ALIST *L) { int i = 0; for(;i <= L->num; i++) printf("%d, ", L->data[i]); printf("\n"); }
ok ,结构体使用就这些了哈!
2 共用体 待续
共用体和结构体还是不太一样哈,结构体可以存储不同的类型,而结构体只可以存储其中的一种类型。
上次同学还在讨论共用体问题,所以自己还是记得清楚,此时注意strut 和union的大小问题(由于公用体每次都只能存储一个值{int long 或 double},所以为最大成员长度),同时应该注意union是在编译运行时分配大小的哦!
根据上面的几点,你应该可以,知道union 可以节约内存就可以了哈,说真的自己感觉使用的还是非常少。
相关文章推荐
- C++中的共用体(union)结构解析与结构体(struct)共用体(union) 的区别
- C++学习笔记之struct和union(结构和共用体)
- 结构体和共用体合用(struct及union)
- c语言中的结构(struct)和联合(union)简介
- c语言中的结构(struct)和联合(union)简介
- C/C++中关于结构(struct)和联合(union)的简单介绍
- typedef _packed struct _packed关键字的意思是在struct和union结构中不添加填充字节
- 结构struct 联合Union和枚举Enum的细节讨论
- 结构体(struct)、联合体(union)、枚举(enum) 三种结构的区别及各个结构细节的总结
- 结构(struct)&联合(union)
- c语言中的结构(struct)和联合(union)简介
- 从零开始再学VC——联合(UNION),结构(STRUCT)
- c语言中的结构(struct)和联合(union)简介
- 构造数据类型struct,共用体union,枚举类型enum,宏#define的区别
- c语言 结构(struct)和 联合(union)
- 联合、结构和类(Union, Struct, Class)
- c语言中的结构(struct)和联合(union)简介
- [精华] c语言中的结构(struct)和联合(union)简介
- c语言中的结构(struct)和联合(union)简介
- Windows下struct和union字节对齐设置以及大小的确定(一 简介和结构体大小的确定)