结构体初始化

来源:互联网 发布:古鹰 知乎 编辑:程序博客网 时间:2024/06/08 19:16



基本上初始化的常用方法有三种:


1.gcc的扩展方式

#include <stdio.h>    struct mych {      int k;  };    struct myst {      int         i;        int         j;        struct mych ch; };    int main(void)   {      struct myst st = {           .i = 1,          .j = 2,          .ch = {               .k = 3           }         };        printf("st.i = %d, st.j = %d, st.ch.k = %d\n", st.i, st.j, st.ch.k);      return 0;  }  

这种方式是在成员前面加上“."来初始化,这种方式比较直观,但是属于gcc扩展,可移植性较差。但是如果是完全面向Linux的开发,这种方式还是比较好的。这是在linux内核中发现的,具体可以参考Linux内核中/net/ipv4目录中的arp.c文件

2.使用{}来进行初始化

  1. struct myst st = { 1 ,2, {4}};  

  1. 这种方式输入C标准的用法,可移植性好,但是结构体类型复杂时,可读性很差

3.使用库函数

  1. memset(&st, 0, sizeof (st));  
  2. bzero(&st, sizeof (st)); 
memset和bzero的主要区别是:参数个数不同;memset 需要三个参数,其中第二个参数是&st指向的内存中要初始化的值,而bzero使用0来初始化




原创粉丝点击