gcc 居然 可以这样初始化 结构体??

CCDDzclxy 2013-07-27 07:30:02
RT

之前没用过gcc,现在遇到这个。

如下代码,gcc 确实编译OK .. 代码中也没有重新申请新地址。但是,记忆中不该是这样的,有点暂时接接受不了...

啊有人讲解下 ? gcc 特色 ?


#include <iostream>

struct AAA{
int i;
int j;
};

struct AAA g_BBB[8];

int main()
{
std::cout <<"1 : g_BBB[3].i ==> "<< g_BBB[3].i <<std::endl;
std::cout <<"1 : &g_BBB[3].i ==> "<< &g_BBB[3].i <<std::endl;

int i = 0;
for (i=0; i<8; i++)
{
g_BBB[i] = (struct AAA){i, i};
}
std::cout <<"2 : g_BBB[3].i ==> "<< g_BBB[3].i <<std::endl;
std::cout <<"2 : &g_BBB[3].i ==> "<< &g_BBB[3].i <<std::endl;
return 0;
}

控制台输出为:

1 : g_BBB[3].i ==> 0
1 : &g_BBB[3].i ==> 0x8049c98
2 : g_BBB[3].i ==> 3
2 : &g_BBB[3].i ==> 0x8049c98
...全文
613 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
一根烂笔头 2013-07-29
  • 打赏
  • 举报
回复
引用 8 楼 CCDDzclxy 的回复:
[quote=引用 7 楼 my_live_123 的回复:]

 g_BBB[i] = (struct AAA){i, i};
估计lz有一点还没有明白:在c++里,(struct AAA){i, i}只是一个临时构造成你执行的类型的变量

struct AAA temp = {i, i};
g_BBB[i]=temp;
呵呵 你也不看看地址[/quote] 你汇编下,看下汇编代码就知道我为什么这么说了!
lin5161678 2013-07-29
  • 打赏
  • 举报
回复
没人告诉楼主 啷个不是初始化吗?
u011187286 2013-07-29
  • 打赏
  • 举报
回复
这样没有什么不对啊,现在C++ primer plus(第六版)里面都是这么写的。
buyong 2013-07-28
  • 打赏
  • 举报
回复
g_BBB[i] = (struct AAA){i, i}; 这也可能是赋值吧
CCDDzclxy 2013-07-28
  • 打赏
  • 举报
回复
引用 8 楼 CCDDzclxy 的回复:
[quote=引用 7 楼 my_live_123 的回复:]

 g_BBB[i] = (struct AAA){i, i};
估计lz有一点还没有明白:在c++里,(struct AAA){i, i}只是一个临时构造成你执行的类型的变量

struct AAA temp = {i, i};
g_BBB[i]=temp;
呵呵 你也不看看地址[/quote] 没有过脑子的说出来了,这样说也不对...
CCDDzclxy 2013-07-28
  • 打赏
  • 举报
回复
引用 6 楼 ak47_wz 的回复:
这个也没什么问题. linux上面很多东西经常这么写.
恩恩,就是看到linux里面这样才自己测试了一下的...
CCDDzclxy 2013-07-28
  • 打赏
  • 举报
回复
引用 7 楼 my_live_123 的回复:

 g_BBB[i] = (struct AAA){i, i};
估计lz有一点还没有明白:在c++里,(struct AAA){i, i}只是一个临时构造成你执行的类型的变量

struct AAA temp = {i, i};
g_BBB[i]=temp;
呵呵 你也不看看地址
一根烂笔头 2013-07-28
  • 打赏
  • 举报
回复

 g_BBB[i] = (struct AAA){i, i};
估计lz有一点还没有明白:在c++里,(struct AAA){i, i}只是一个临时构造成你执行的类型的变量

struct AAA temp = {i, i};
g_BBB[i]=temp;
水平不流 2013-07-28
  • 打赏
  • 举报
回复
这个也没什么问题. linux上面很多东西经常这么写.
  • 打赏
  • 举报
回复
应该 g_BBB[i] = {i, i};这么写
ForestDB 2013-07-27
  • 打赏
  • 举报
回复
很多C/C++新的标准,都是源自于gcc的extension。
taodm 2013-07-27
  • 打赏
  • 举报
回复
C++2011标准已经正式使用了类似的构造语法。 所以,吐习惯了就好了。
图灵狗 2013-07-27
  • 打赏
  • 举报
回复
即便可以也最好不要这样用。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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