您的位置:首页 > 其它

C99标准的结构体赋值注解

2016-01-21 15:38 127 查看

关于结构体的赋值问题

#include <stdio.h>

static struct id_mesg{
char *name;
unsigned int age;
char *job;
};

static struct id_mesg persons[] = {
{"bimax", 23, "hero"},
{"deadpool", 34, "marvel"},
{"thor", 65535, "god"},
{.name = "linus", .job  = "linuxman"}
};

static struct id_mesg per_one = {
.name = "gates",
.age  = 43,
.job  = "ITman",
};

int main(int argc, char **argv)
{
int i;

for(i = 0; i < 4; i ++)
{
printf("name: %s\t age: %d\t job: %s\n", persons[i].name, persons[i].age, persons[i].job);
}

printf("name: %s\t age: %d\t job: %s\n", per_one.name, per_one.age, per_one.job);
}


程序如上所示。

static struct id_mesg persons[] = {
{"bimax", 23, "hero"},
{"deadpool", 34, "marvel"},
{"thor", 65535, "god"},
{.name = "linus", .job  = "linuxman"}
};
该段的前三个为结构体赋值常用方法,最后一个是来自C99标准,表示指定初始化,使用前缀.加变量名称进行定向赋值

如上所示,分别对name赋值为字符串“linus”,job赋值为字符串“linuxman”,可以空下age不进行赋值这使得结构体的赋值更加便捷,而且可以单独对某一个变量进行赋值而不需要管其他的变量。

倘若我们使用前三项的方法只对age和job进行赋值是比较困难的,但是使用最后一个初始化形式对这两者赋值则是非常简单,这个特性常常用在结构体变量非常多而且不需要全部进行初始化的地方,在linux的内核当中可以看到有大量的这种方法赋值的语句。

我们也可以单独进行一个结构体的赋值,如下

static struct id_mesg per_one = {
.name = "gates",
.age  = 43,
.job  = "ITman",
};

上述程序运行之后的结果是:

name: bimax age: 23 job: hero

name: deadpool age: 34 job: marvel

name: thor age: 65535 job: god

name: linus age: 0 job: linuxman

name: gates age: 43 job: ITman
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: