枚举变量的新认识

枚举变量不能直接取地址作为指针参数传入被调用的函数

枚举类型内存的sizeof的大小就是自己的成员数(成员是uint8_t)。

 枚举的成员是uint8类型的在作为指针传参时候千万不能认为就是一个字节的。

uint16_t bdb_start_commissioning(bdb_mode_t mode)
{
	uint8_t nMode;
	if((mode!=BDB_MODE_TOUCHLINK)&&(mode!=BDB_MODE_JOIN)&&(mode!=BDB_MODE_FORMATION)&&
		(mode!=BDB_MODE_FIND_BIND))
	{
		vDEBUG_PRINTF_ERROR1("invaild paramer");
		return 1;
	}
	vDEBUG_PRINTF_APP(TRACE_ON,"mode=%02x,%d,%d,%d",&mode,*(&mode),mode,sizeof(bdb_mode_t));
	nMode = (uint8_t)mode;	
	bdb_cmdType_dataSend(BDB_START_COMMISSIONING,&mode,1);
	return 0;
}

本来给枚举类型的mode的值是4,[APP]<38>[bdb_start_commissioning]mode=7ff84e38,4,4,4

在代入形参前对枚举变量的打印依然是正确的值,4

uint8_t fzxHost_Send_format(uint8_t cmdType,uint8 cmdid, uint8 *payload,uint16 pyLen)
{
 		 vDEBUG_PRINTF_UART(TRACE_ON,"cmdType=%02x,cmdid=%02x,*payload=0x%02x 0x%02x 0x%02x 0x%02x",cmdType,cmdid,payload[0],payload[1],payload[2],payload[3]);
  	  }

	}

但是将枚举类型取地址代入到指针形参中,在调用函数里(如上代码),居然指针内存的第一个字节不是正确的值4

这个时候对枚举变量强制转换也是没用的

这里的关键信息是枚举类型的内存大小问题??事实是枚举类型内存的大小就是自己的成员数。

问题是为啥赋值不再第一个内存而是在第四个内存?

扫描二维码关注公众号,回复: 5751621 查看本文章

猜你喜欢

转载自blog.csdn.net/H542723151/article/details/88697759