关于 结构体 的使用

3/8/2017来源:ASP.NET技巧人气:350

上一次,在看液晶的驱动程序的时候,了解了结构体其实跟数组一样是按地址顺序排列的.只不过,结构体里的成员变量 是长短不一的,而不像数组都是统一长度. 

        在一个新的项目中,因为发送数据的长度,存在长短不一,每个成员的名称和功能又不一样,所以觉得在这里使用结构体合适一点.

我定义了一给结构体类型:

typedef struct 

{

u16 send_fpga_x_start;

u16 send_fpga_y_start;

u16 send_fpga_x_end;

u16 send_fpga_y_end;

u16 scaler_V_DISP_in;

u16 scaler_H_DISP_in;

u16 scaler_VSFACTOR;

u16 scaler_HSFACTOR;

} video_size;

这是是需要计算出来并发送给串口的值,这样定义可比数组更加的直观.

            然后,video_size self_size  定义一个实体 ,通过函数.calculate()把数据计算出来,存放在这个实体里.然后通过send_parameter(),用串口,以字节为单位发送给fpga.这就需要传递,如果使用地址传递结构体指针.

           首先,calculate(u16 *p) 定义了一个u16 的地址指针,表示每个地址指向的是一个u16的存储单元.然后,在使用的时候,calculate((u16 *)&self_size).结构体并不像数组,名称就是地址.而是需要取地址,再强制转换地址类型.  最后,send_parameter((u16 *)&self_size),

           还有第二种定义使用的方法:calculate(video_size *p),这样就可以直接使用了.calculate(&self_size).

算是亲身经历吧,结构体在某些环境下使用的确要比用数组让人感觉舒服.