C语言之 .struct结构体,enum枚举,union共用体,以及相互嵌套的使用

一、结构体,枚举,共用体

1、结构体的定义,结构体类似数组,一段连续的地址空间,定义后,空间大小不可更改,但是比数组不同的是,结构体数据类型,可以都不一样,可以定义任何类型,嵌套各种指针。

struct pnode {
   
   
	unsigned int sn;
	NODEINFO nodeinfo;
	BOOL loop;
	struct pnode *next;
	struct pnode *previous;
};

typedef struct {
   
      //  typedef 重命名一个结构体类型,结构体大多数是这么用,
	struct pnode *head;
	struct pnode *tail;
	struct pnode *cur;
	WORD mode;
	WORD MaxFile;
} list_info ,*_p_list_info ;
list_info  my_list_info ;   //定义一个list_info 类型的 结构体
_p_list_info  p_list_info;  //定义一个结构体指针
p_list_info   = &my_list_info;  //指向这个结构体

结构体赋值,结构体数组,成员赋值

typedef struct {
   
   
	WORD menu_id;
	const WORD* icon;
	BYTE val;
	next_menu next;
	menu_title title;
	BOOL corr_sys_paras;
}menu_format;

menu_format const menu_app_photocap[] = {
   
   //在定义结构体变量时,可以这样全部成员赋值
	{
   
   
		.menu_id = MENU_ID_PHOTOCAP_SET,
		.icon = (WORD*)IconMenuPhotoCap,
		.next.menu = menu_photocap_item,
		.next.menu_size = sizeof(menu_photocap_item)/sizeof(menu_recorder_item[0]),
		.title.icon_str_id = ICON_ST_PHOTOCAP,
	},
	{
   
   
		.menu_id = MENU_ID_SYS_SET,
		.icon = (WORD*)IconMenuSetup,
		.next.menu = menu_sys_item,
		.next.menu_size = sizeof(menu_sys_item)/sizeof(menu_sys_item[0]),
		.title.icon_str_id = ICON_ST_SYS_SET,
	},
};

在定义结构体变量时,可以这样全部成员赋值,和数组一样,定义后,使用时,不能全部一起赋值,需要一个一个成员赋值,a[1] = b[1],


    SX_S8 * pszSendBuf = (SX_S8 *)malloc( UDP_MAX_LEN );//申请一大段内存
	memset(pszSendBuf,0,UDP_MAX_LEN);
	PT_DataPkt_1 pkt 	= (PT_DataPkt_1)(pszSendBuf);  //将这段内存,强制类型转换成结构体类型,按结构体来解析
	
	pkt->u32Sync 		= PKT_SYNC;
	pkt->u8Cmd 			= CMD_ACK_BIT1;
	pkt->u32DataLen 	        = sizeof(T_BIT_1);
	pkt->u32totalPktNum	= 1;
	pkt->u32currretPkt	        = 1;
	pkt->CRC32 			= 0xC4C3C2C1;

	//file data
	memset((SX_U8 *)(&pkt->BITData), 0, sizeof(T_BIT_1) );
	pkt->BITData.u8head 		        = 12;
	pkt->BITData.u8SoftwareRev	= (SX_U8)software_reversion;
	pkt->BITData.u8reserv0 		= 0;
	pkt->BITData.u8reserv1 		= 0;
	pkt->BITData.u8devicetype		= (SX_U8)U8DeviceType;
	pkt->BITData.u8devicestatus	= (SX_U8)client_fpga_status;
	pkt->BITData.u16packnum		= u16packnum;
	memset( pkt->BITData.u8reserver2, 0, sizeof(pkt->BITData.u8reserver2) );
	
	ret = Bit_Server_Send1(handle->ptClientBIT1, (SX_S8 *)pkt, sizeof(T_DataPkt_1));//将结构体,类型强制成一个字节,通过网络发送出去,发送字符时,都一个一个字节传送,对方收到时,用结构体类型,解析,就可以还原了
SX_S32 Bit_Server_Send1(PT_CLIENT handle, void *buf, SX_S32 len)
{
   
   
	if( handle == NULL || len <= 0 || len > UDP_MAX_LEN )
	{
   
   
		TRACE(DL_ERROR, "DL_ERROR\n");
		return 0;
	}
	
	SX_S32 length;
	if( buf )
	{
   
   
		length = MIN(len, UDP_MAX_LEN);
		return sendto( handle->sockfd, (const SX_S8 *)buf, length
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值