[求助] C语言语法分析

火火山   2016-7-12 14:58 楼主
SPLASH_HEADER SplashHeader;  // 这是一个结构体类型

read_dpp3430_i2c(DPP3430_DEV_ADDR, READ_SPLASH_SCREEN_HEADER, &Param, 1, (uint08 *)&SplashHeader, sizeof (SplashHeader));  // 这是一个函数调用

请问(uint08 *)&SplashHeader是什么意思?sizeof (SplashHeader)是什么意思?

结构体内部为:

typedef struct
{
    uint16  Image_width;    /**< width of image in pixels */
    uint16  Image_height;   /**< height of image in pixels */
    uint32  Byte_count;     /**< number of bytes starting at "data" */
    uint08  Pixel_format;   /**< format of pixel data */
                            /**< 0 = 24-bit unpacked: 0x00RRGGBB Not supported by DDP2230/DDPDDP243x*/
                            /**< 1 = 24-bit packed:   RGB 8-8-8 */
                            /**< 2 = 16-bit:          RGB 5-6-5   DDP3020 only */
                            /**< 3 = 16-bit:          YCrCb 4:2:2 DDP2230/DDPDDP243x only */
    uint08  Compression;    /**< compression of image */
                            /**< SPLASH_FORCE_UNCOMPRESSED  = uncompressed */
                            /**< SPLASH_FORCE_RLE           = RLE compressed */
                            /**< SPLASH_USER_DEFINED        = User Defined Compression */
                            /**< SPLASH_FORCE_RLE_2PIXEL    = RLE compressed 2Pixel */

    uint08  ByteOrder;      /**< 0 - pixel is 00RRGGBB - DDP3020 */
                            /**< 1 - pixel is 00GGRRBB - DDP2230/DDPDDP243x */
    uint08  ChromaOrder;    /**< Indicates chroma order of pixel data (DDP2230/DDPDDP243x only) */
                            /**< 0 - Cr is first pixel (0xYYRR) */
                            /**< 1 - Cb is first pixel (0xYYBB) */
} SPLASH_HEADER;

回复评论 (7)

打开百度搜索

C语言 sizeof
强者为尊,弱者,死无葬身之地
点赞  2016-7-12 15:03
(uint08 *)&SplashHeader 强制类型转换 百度一下
刻苦学习,共同进步
点赞  2016-7-12 15:08
引用: 辛昕 发表于 2016-7-12 15:03
打开百度搜索

C语言 sizeof

sizeof的作用知道一点,但是用在结构体上面,我就不明白了
点赞  2016-7-12 15:32
引用: 火火山 发表于 2016-7-12 15:32
sizeof的作用知道一点,但是用在结构体上面,我就不明白了

计算整段的size
即多少个char
点赞  2016-7-12 15:37
  sizeof (SplashHeader):计算结构体SplashHeader占用多少个字节空间

(uint08 *)&SplashHeader:&SplashHeader表示取这个结构体的地址,(uint08 *)表示将这个地址强制转换成uint08 *指针类型的

点赞  2016-7-12 15:42
引用: 火火山 发表于 2016-7-12 15:32
sizeof的作用知道一点,但是用在结构体上面,我就不明白了

你问的这个问题,相当于问,当一个结构体作为 sizeof 的操作数 的时候,是什么结果。
其实说真的,这种问题很纠结,我也不知道怎么回答。

但是,有两个思路可以推荐给你的。

1.实际把这个sizeof结果打印出来,或者debug查看变量,你就知道了。看着这个数值和这个结构体的结构你应该很快能猜出来;
2.类比 sizeof(指针) sizeof(数组),你也应该可以理解。

我稍微多说一点,sizeof不是一个函数,而是一个运算符,对,就是和 + - 那样的运算符。

另外,sizeof 计算的是 该 变量或者数据类型 占据的空间大小,单位byte
这个,倒不是出自什么权威文件,只是实际经验总结。

比如 sizeof(char) 一般等于1
char s[8];
sizeof(s) = 8;
char *p;
sizeof(p) 一般等于 4,因为它是指针

即使 p = s;
sizeof(p) 仍然是 4

同样的,我们可以这样 sizeof(char)还是1,sizeof(char *)还是4.
这说明,sizeof不仅可以对 变量,也可以对 数据类型本身。

所以回到你问的,用在结构体上的问题就是

不管是你的 结构体变量名sizeof,还是这个结构体类型名 sizeof 也是一样的。

强者为尊,弱者,死无葬身之地
点赞  2016-7-13 10:08
引用: 辛昕 发表于 2016-7-13 10:08
你问的这个问题,相当于问,当一个结构体作为 sizeof 的操作数 的时候,是什么结果。
其实说真的,这种 ...

谢谢版主,很棒
点赞  2016-7-13 10:46
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复