结构体还可以这样赋值?

暴风lay 2012-08-14 10:25:17
struct usb_drv_info drivers[]={

[0] = {.name = "abc",
.type = "USB_SERIAL,"},
[1] = {.name = "def",
.type = "USB_WIFI,"},
}

今天看代码是看到这样的赋值方式,网上找了下也没看到,假如哪位大哥大姐知道麻烦解释下,最后能给个相关资料的链接,谢谢了!!!
...全文
232 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
c87527124 2012-08-16
  • 打赏
  • 举报
回复
我的C99竟然通不过楼主的代码
赵4老师 2012-08-16
  • 打赏
  • 举报
回复
又见各种语法糖
proorck6 2012-08-16
  • 打赏
  • 举报
回复
这样写当然有好处,比较直观,那个成员赋了那个值,一看就明白了。
暴风lay 2012-08-15
  • 打赏
  • 举报
回复
恩,谢谢各位了,代码应该是模仿linux内核写的,本想查下C99的,英语太差了啊。。。
qq120848369 2012-08-15
  • 打赏
  • 举报
回复
用了好久了, 还有更变态的, 都是可以放心使用的, 不只是放心, 是方便, 给你个例子:

[liangdong@bb-browser-test00.vm.baidu.com c_project]$ make
gcc -g -I. -I../libs/include -c -o main.o main.c
gcc -o main main.o
[liangdong@bb-browser-test00.vm.baidu.com c_project]$ ./main
1 2 ab
[liangdong@bb-browser-test00.vm.baidu.com c_project]$ cat main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct node_st {
int a;
int b;
int c;
int d;
char str[10];
};

int main(int argc, char* const argv[]) {
struct node_st node = {
.a = 1,
.c = 2,
.str[0] = 'a',
.str[1] = 'b',
.str[2] = '\0'
};
printf("%d %d %s\n", node.a, node.c, node.str);
return 0;
}
fdl19881 2012-08-15
  • 打赏
  • 举报
回复
{.成员 = xxx,
.成员 = xxx
}
这种方式比较多了,至少linux内核中都是这样的。在C99标准中规定的。

对数组中的任意元素赋值的方法
在ISO C99中,你可以按任何顺序给出这些元素,指明它们对应的数组的下标或结构体的成员名,并且GNU C也把这作为C89模式下的一个扩展。这个扩展没有在GNU C++中实现。
比如:
为了指定一个数组下标,在元素值的前面写上“[index] =”。比如:
int a[6] = { [4] = 29, [2] = 15 };
nand库路泽 2012-08-15
  • 打赏
  • 举报
回复
貌似从来没有这种的赋值方式吧,就算有,也不是好的代码风格!
taodm 2012-08-14
  • 打赏
  • 举报
回复
C99标准的指定初始化。
Qyee16 2012-08-14
  • 打赏
  • 举报
回复
你是看到会变代码了?但是汇编也没见过这样的。。。。。。。。
zjs100901 2012-08-14
  • 打赏
  • 举报
回复
gcc里的吗?
fzamygsd 2012-08-14
  • 打赏
  • 举报
回复
木见过,难道是新标准或C99里的?

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧