C语言语法分析

2019-03-24 17:34发布

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条回答
辛昕
2019-03-25 12:29
火火山 发表于 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 也是一样的。

一周热门 更多>