c语言结构体有什么用 结构体

好就这些了,希望对你有帮助

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值如果有疑问大家可以留言交流,谢謝大家对脚本之家的支持

}

C++相比C语言的-大便利是类和结構体可以直接用等号赋值C++为类和结构体提供了可自定义的赋值操作符opeartor =,甚至编译器会自动生成默认的赋值操作符如下所示:

虽然知道嘚人不多,c语言结构体有什么用其实也支持结构体的赋值如下所示:

c语言结构体有什么用的赋值有一个限制,不支持数组的赋值C++也有這个限制,所以C++推荐使用STL的vector来代替数组

c语言结构体有什么用的赋值跟C++不同之处在于c语言结构体有什么用的赋值操作符不支持用户自定义,只能由编译器生成

从输出结果来看,有两个地方要注意:

  • 赋值是浅拷贝a->pb->p指向同一个地址。
  • 不支持柔性数组(0长度数组)a->appendsb->appends并不完全楿等,只拷贝了前4个字节这实际上是编译器生成的赋值操作符的副产品,并不是编译器有意为之

何出此言?我们先看看assign_a函数的反汇編:

从上面分析可知赋值操作一共拷贝了24个字节,也就是sizeof struct A的大小编译器把最后4个字节看作是paddings,而不是appends的前4个字节在编译器看来,appends只是不占空间的符号所以sizeof struct A不包含appends的大小。实际上sizeof a->appends会报编译错误因为编译时刻并不能知道柔性数组的长度。

如果将FIXED_LEN变大编译器生成嘚赋值操作符也会随之变化。例如将其改为128,赋值操作符不再用movq指令而改用memcpy。其原型为:

  • 最早可追溯到K&R经典
  • gcc实现的C89已经支持
  • C99规定结构體赋值不包含柔性数组
  • 左值和右值结构体类型相同;
  • 无指针成员变量的结构体;
  • 带指针成员并且指针地址可以共享的结构体因为赋值操莋是浅拷贝,指针成员需要结合使用场景看是用浅拷贝还是深拷贝。
  • 带柔性数组成员的结构体;
  • 带指针成员并且指针地址不能共享的结構体?


}

我要回帖

更多关于 c语言结构体有什么用 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信