结构体中冒号的含义
这是位域操作的表示方法,也就是说后面加上“:1”的意思是这个成员的大小占所定义类型的1 bit,“:2”占2 bit,依次类推。当然大小不能超过所定义类型包含的总bit数。
一个bytes(字节)是8 bit(bit)。例如你的结构中定义的类型是uint64_t,8个字节,共64bit,最大就不能超过64。short是2字节,共16bit,最大就不能超过16。int是4字节,共32bit,最大就不能超过32。
C语言中,结构体中(.)和(->)的区别
相同点:两个都是二元操作符,其右操作符是成员的名称。
不同点:点操作符左边的操作数是一个“结果为结构”的表达式;
箭头操作符左边的操作数是一个指向结构的指针。
举例说明:
#include <string.h>
Song_t song1,song2, //两个Song_t类型的对象
*pSong = &song1; //和一个指向Song_t的指针
strcpy(song1.composer,"Ottma Liebert");
song1.duration = 251;
song1.published.year = 1998;
if((*pSong).duration >180)
printf("The song is more than 3 mimutes long.\n");
--最后一句也可以改写为:
if(pSong->duration > 180) ....
另外一点体会:如果一个函数的传入参数是结构体,且需要该结构体作为返回值的时候,必须采用指针传递的方式,其中对结构体赋值必须使用箭头运算符。
int iSetValue(Song_t *pSong)
{
strcpy( pSong ->composer,"123");
pSong->duration = 251;
...
}