结构体初始化

OPPPPOP 2017-12-15 05:33:31
typedef struct
{
xx a;
} PCB;

PCB b = PCB();

如此可以的吗?
有啥问题么?
...全文
221 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2017-12-16
  • 打赏
  • 举报
回复
C++可以这样写,相当于赋值一个临时类对象(调用默认构造函数),C语言没有这种语法
OPPPPOP 2017-12-16
  • 打赏
  • 举报
回复
引用 5 楼 a1193561652 的回复:
C++语法上是可以的。但是还不如写成PCB b();,或者PCB b; 那个PCB b = PCB();像是先创建了一个对象b,然后又由PCB()创建了一个零时对象,然后在把零时对象复制到b上去。 然后我觉得你想要的是这个PCB* b = new PCB();不过这样记得最后自己delete。
是这样的,我一般在函数头部把变量都定义好 比如 PCB b; vector<xx> ls = vector<>(); 如果有循环的话 for(xx;xx;xx) { b = PCB(); ls.push_back(b); } 如果像你所说,那就需要在循环中 PCB b = PCB(); 我想只定义一次PCB b这个变量; 另外这次又同样引用了 vector<xx> ls = vector<>(); 其实是一个症状, 就是作为java程序员认为 vector<xx> ls;这样只是定义 ls 变量,他像C里的野指针,完全不能用;虽然我知道C++里并不是这样, 但我还是按照java的语法写了如上的语句,不知有何不好或引起什么问题亦或者在某种环境下根本编译不过去,恳求各位给予详细指点。
纵横车 2017-12-16
  • 打赏
  • 举报
回复
C++语法上是可以的。但是还不如写成PCB b();,或者PCB b; 那个PCB b = PCB();像是先创建了一个对象b,然后又由PCB()创建了一个零时对象,然后在把零时对象复制到b上去。 然后我觉得你想要的是这个PCB* b = new PCB();不过这样记得最后自己delete。
wodexiaojidan 2017-12-16
  • 打赏
  • 举报
回复
C不行,但是C++完全没毛病,只是多此一举。编译器如果支持C++11以上的版本,你可以用PCB b{}这种定义, Java这样做敢情把声明和定义严格区分了。
纵横车 2017-12-16
  • 打赏
  • 举报
回复
还有,如果你要这样用的话,有时候可能要自己重写赋值操作符。
纵横车 2017-12-16
  • 打赏
  • 举报
回复
引用 6 楼 antiwise 的回复:
[quote=引用 5 楼 a1193561652 的回复:] C++语法上是可以的。但是还不如写成PCB b();,或者PCB b; 那个PCB b = PCB();像是先创建了一个对象b,然后又由PCB()创建了一个零时对象,然后在把零时对象复制到b上去。 然后我觉得你想要的是这个PCB* b = new PCB();不过这样记得最后自己delete。
是这样的,我一般在函数头部把变量都定义好 比如 PCB b; vector<xx> ls = vector<>(); 如果有循环的话 for(xx;xx;xx) { b = PCB(); ls.push_back(b); } 如果像你所说,那就需要在循环中 PCB b = PCB(); 我想只定义一次PCB b这个变量; 另外这次又同样引用了 vector<xx> ls = vector<>(); 其实是一个症状, 就是作为java程序员认为 vector<xx> ls;这样只是定义 ls 变量,他像C里的野指针,完全不能用;虽然我知道C++里并不是这样, 但我还是按照java的语法写了如上的语句,不知有何不好或引起什么问题亦或者在某种环境下根本编译不过去,恳求各位给予详细指点。[/quote] 不会引起什么错误,就是中间做了一些无用的操作而已。 对于上面的代码,在循环里可以不用b = PCB();直接ls.push_back(b);就好了。
OPPPPOP 2017-12-15
  • 打赏
  • 举报
回复
我是之前一直写Java语言, 最近几年穿插着写点C++ ,像这样的用法我用了有好一段时间,有点强迫症的意思吧,我确认这样式可以的,只是求前辈指点这样的语句的标准说明
自信男孩 2017-12-15
  • 打赏
  • 举报
回复
有没有自己试一下,如果试了可以或者不可以,询问问题可以的。 像这种不知道是否可行,建议自己先编程试一下。
老马何以识途 2017-12-15
  • 打赏
  • 举报
回复
C++中好像可以,C應該不行。

69,373

社区成员

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

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