1.struct关键字

C 语言中的 struct 可以看作变量的集合struct中的每个数据成员都有独立的存储空间。

结构体与柔性数组

(1)柔性数组即数组大小待定的数组

(2)C 语言中可以由结构体产生柔性数组

(3)C 语言中结构体的最后一个元素可以是大小未知的数组

struct SoftArray
{
int len;
int array[];
}

array 仅是一个待使用的标识符。与指针不同,编译器并不为 array 变量分配空间,因为也不知道 array 究竟多大。只是用来作为一个标识符,以便以后可以通过这个标识符来访问其中的内容。所以sizeof(SoftArray)=4

(4)柔性数组的用法

struct SoftArray* sa = NULL;
//注意,因 sizeof 柔性数组并不包含 array 大小,所以要开辟的空间总大小应等于
//柔性数组+数组各元素所占的空间,即空间大小等于结构体的大小(len域)加上数组的大小
sa = (struct SoftArray*)malloc(sizeof(struct SoftArray)+sizoef(int)*);
sa->len = ;

(5)柔性数组的使用

#include <stdio.h>
#include <malloc.h>
struct SoftArray
{
int len;
int array[];
};
struct SoftArray* create_soft_array(int size)
{
struct SoftArray* ret = NULL;
if( size > )
{
ret = (struct SoftArray*)malloc(sizeof(struct SoftArray) +sizeof(int) * size);
ret->len = size;
}
return ret;
}
void delete_soft_array(struct SoftArray* sa)
{
free(sa);
}
void func(struct SoftArray* sa)
{
int i = ;
if( NULL != sa )
{
for(i=; i<sa->len; i++)
{
sa->array[i] = i + ;
}
}
}
int main()
{
int i = ;
struct SoftArray* sa = create_soft_array();
func(sa);
for(i=; i<sa->len; i++)
{
printf("%d\n", sa->array[i]);
}
delete_soft_array(sa);
return ;
}

2.union关键字

(1)C 语言中的 union 在语法上与 struct 相似

(2)union 只分配最大成员的空间,所有成员共享这个空间

struct A
{
int a;
int b;
int c;
};
union B
{
int a;
int b;
int c;
}; int main()
{
printf("sizeof(A) = %d\n",sizeof(A));//
printf("sizeof(B) = %d\n",sizeof(B));//
}

(3)union 的使用受系统大小端的影响

判断系统的大小端

#include <stdio.h>
int system_mode()
{
union SM
{
int i;
char c;
};
union SM sm;
sm.i = ;
return sm.c;
}
int main()
{
//返回 1 时为小端,0 为大端模式
printf("System Mode: %d\n", system_mode());
return ;
}

参考资料:
www.dt4sw.com
http://www.cnblogs.com/5iedu/category/804081.html

最新文章

  1. jQuery绑定事件的四种方式
  2. Java 线程池学习
  3. 事件的委托处理(Event Delegation)
  4. IE6的bug
  5. 201521123002 《Java程序设计》第6周学习总结
  6. Angularjs 2 绝对零基础的教程(1):从安装配置开始
  7. PDF文件怎么转换成PPT
  8. android-音量管理
  9. SaltStack安装配置详解
  10. 这一年多来,阿里Blink测试体系如何从0走向成熟?
  11. C#设计模式(7)——适配器模式
  12. Python 程序下载经办人照片
  13. Redis与Mysql数据同步
  14. ES最佳实践之分片使用优化
  15. c#窗体移动与窗体阴影效果
  16. elk系列6之tcp模块的使用【转】
  17. BZOJ AC倒序总结
  18. JMeter 十一:参数化
  19. 纤程与Quasar
  20. 12-15winform--窗体

热门文章

  1. [原创]java WEB学习笔记35:java WEB 中关于绝对路径 和相对路径问题
  2. dede调用二级下拉菜单方法
  3. Vim 命令记录与回放
  4. hiho一下 第四十九周 题目1 : 欧拉路&#183;一【无向图 欧拉路问题】
  5. Memory Layout of C Programs
  6. 普通java类加入spring容器的四种方式
  7. pyqt5开发之俄罗斯方块
  8. Linux下c++11多线程聊天室
  9. 分享知识-快乐自己:虚拟机 NET 网络配置
  10. 十三 Django框架,CSRF跨站请求伪造