C语言结构体

结构体是一种由内置类型以某种形式(指针、数组、一般形式)结合struct关键字组合在一起描述复杂数据信息的新类型。

声明结构体的一般形式:

struct structName

{

成员表列;

}; // 注意分号

例:声明一个可以描述一本书的书名、版本、价格、出版社信息的结构体

struct bookInfo

{

   char name[30];// 书名

   char bookConcern[50]; // 出版社

   int version; // 版本

   float price;  // 价格

};

定义变量:

struct bookInfo englishBook; // englishBook包含了书名、版本、价格、出版社信息

  *延伸:

       声明结构体时定义变量:

         struct bookInfo // 可以省略bookInfo结构体名

         {

             char name[30];// 书名

             char bookConcern[50]; // 出版社

             int version; // 版本

            float price;  // 价格

         } oneBook, twoBook; // 这种情况下相当于定义了两个变量oneBook、twoBook;

     使用typedef:

        typedef struct bookInfo // bookInfo可省

       {

         ....

      } BOOK; // BOOK等同于struct bookInfo; 定义变量可以直接使用BOOK book;

赋值:

a、定义时直接赋值

    struct bookInfo mathBook = {"数学选修", "人民邮电出版社" ,2, 32.5};

    * 这种初始化方式要注意声明结构体的成员类型顺序,严格按照成员类型顺序为每个成员的赋值。struct bookInfo的成员类型顺序为char* char* int float。

b、单个成员逐一赋值

struct bookInfo englishBook;

strcpy(englishBook.name, "新概念英语");

strcpy(englishBook.bookConcern, "人民邮电出版社");

englishBook.version = 2;

englishBook.price = 25.2f;

c、部分初始化

struct bookInfo englishBook = {.name="新概念英语"}; // 只初始化书名

struct bookInfo programBook = {.price=45.0f,.bookConcern="人民邮电出版社"}; // 只初始出版社和价格

*这种指定初始化不要求按照成员类型顺序赋值;

*指定初始化必须以.+成员名的形式告诉编译器给哪一个变量赋值;

d、使用另一个结构体赋值

struct bookInfo data1;

struct bookInfo data2 = data1;

struct bookInfo data3;

data3 = data2;

*使用结构体给另一个结构体赋值如果结构体有指针,两个指针指向同一块内存。

定义结构体指针:

struct bookInfo *pBook;

pBook = (struct bookInfo*)molloc(10);

定义结构体数组:

struct bookInfo arrBook[10];

结构体做参数:

  void func(const struct bookInfo bki);

void func(const struct bookInfo* pbki);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值