Tag: 结构

Swift常量:Struct或Enum

我不确定哪个更好定义常量。 结构或枚举。 每次我使用它或不是会复制一个结构体? 当我想到一个带有static let常量的结构时,在我看来,它总是会被复制,这是毫无意义的。 但是,如果它不会被复制,那么我拿什么都没有关系? 结构或枚举的select有什么优点? Francisco说使用Struct的。 雷Wunderlich说使用Enum的。 但我缺乏理由。

将结构复制到C中的结构

我想复制一个相同的结构到另一个,然后用它作为第一个比较。 事情是,当我这样做的时候,我的编译器给了我一个警告! 我应该以另一种方式做,还是我做错了: 在头文件: extern struct RTCclk { uint8_t second; uint8_t minute; uint8_t hour; uint8_t mday; uint8_t month; uint8_t year; } RTCclk; 在C文件中: struct RTCclk RTCclk; struct RTCclk RTCclkBuffert; void FunctionDO(void) { … // Some Code /* Copy first struct values into the second one */ memcpy(&RTCclk, &RTCclkBuffert, sizeof RTCclk); }

为什么C有区别 – >和。

好吧,这没有什么严重的后果,但它一直在困扰我一段时间:是否有理由区分->和. 运营商? 当然,现在的规则是这样的. 作用于结构,并且->作用于指向结构(或联合)的指针。 但是在实践中它是如何工作的 让s是一个包含元素x的结构体,让ps是一个指向相同forms的结构体的指针。 如果你写 s->x 编译器会以这种方式吐出一个警告 你的意思是请重新input并重新编译。 如果你写 ps.x 编译器会以这种方式吐出一个警告 你的意思是ps-> x。 请重新input并重新编译。 由于编译器在编译时知道s和ps的types,因此它具有解释正确运算符所需的所有信息。 我怀疑这不像其他警告(如缺less分号),因为正确的修复没有任何含糊之处。 所以这是一个对C1x标准委员会的假设build议(这是永远不会考虑的,因为ISO是保守的): 给定expression式lhs.rhs,如果lhs是一个结构体或者联合体types,那么这个expression式应该指lhs这个名为rhs的元素。 如果lhs是指向struct或者-union的types,那么这应该被解释为(* lhs).rhs。 这肯定能够节省我们所有的时间,并且让人们更容易学习C [而且我已经教导了足够多的C以权威的方式说,学习者觉得这个东西要么令人困惑,要么令人讨厌。] 甚至还有先例,C做了一些类似的事情。 例如,由于实现的原因,函数声明总是强制转换为函数指针,所以f(x,y)和(*f)(x,y)都将工作,无论f被声明为函数还是指针起作用。 所以,我的问题是:这个build议有什么问题? 你能想到在ps.x和sx之间会有致命的含糊不清的例子,或者为什么保持强制性的区别是有用的?

将一个C结构铸造成另一个

我有两个相同的(但不同的名字)C结构: typedef struct { double x; double y; double z; } CMAcceleration; typedef struct { double x; double y; double z; } Vector3d; 现在我想分配一个CMAccelerationvariables给Vector3dvariables(复制整个结构体)。 我该怎么做? 我尝试了以下,但得到这些编译器错误: vector = acceleration; // "incompatible type" vector = (Vector3d)acceleration; // "conversion to non-scalar type requested" 当然,我可以单独设置所有成员: vector.x = acceleration.x; vector.y = acceleration.y; vector.z = acceleration.z; 但这似乎相当不方便。 什么是最好的解决scheme?

内存中C ++对象的结构与结构

如果我有一个类如下 class Example_Class { private: int x; int y; public: Example_Class() { x = 8; y = 9; } ~Example_Class() { } }; 和一个结构如下 struct { int x; int y; } example_struct; example_struct内存结构与Example_Class类似 例如,如果我做了以下 struct example_struct foo_struct; Example_Class foo_class = Example_Class(); memcpy(&foo_struct, &foo_class, sizeof(foo_struct)); 将foo_struct.x = 8和foo_struct.y = 9 (即:与foo_struct.y = 9中的x,y值相同的值)? 我问的原因是我有一个C ++库(不想改变它)与C代码共享一个对象,我想用一个结构来表示来自C ++库的对象。 […]

初始化/重置结构为零/ null

struct x { char a[10]; char b[20]; int i; char *c; char *d[10]; }; 我正在填充此结构,然后使用值。 在下一次迭代中,我想重置所有的字段为0或null然后再开始重用它。 我怎样才能做到这一点? 我可以使用memset或者我必须通过所有的成员,然后单独做?

在C + +的结构构造?

一个struct可以在C ++中有一个构造函数吗? 我一直在试图解决这个问题,但我没有得到的语法。

为什么从结构实例中不断的约束属性而不是类实例呢?

当我尝试更改byValueObj实例的ID属性时,我收到一个错误,告诉我我不能分配给一个常量的属性,即使该属性是一个variables。 但是,我可以在一个类实例上做到这一点。 我知道这可能与价值和借鉴机制有关。 但是我对此没有很清楚和正确的理解。 有人可以为我解释吗? 谢谢。 struct CreatorValue{ var ID = 2201 } class CreatorRefer{ var ID = 2203 } let byValueObj = CreatorValue() let byReferObj = CreatorRefer() byValueObj.ID = 201 //Error: cannot assign to property: 'byValueObj' is a 'let' constant byReferObj.ID = 203 //works fine here

内置函数“malloc”的不兼容隐式声明

我得到这个错误: warning: incompatible implicit declaration of built-in function 'malloc' 试图做到这一点: fileinfo_list* tempList = malloc(sizeof(fileinfo_list)); 仅供参考,手头使用的结构是: typedef struct { fileinfo** filedata; size_t nFiles; size_t size; size_t fileblock; } fileinfo_list; 我没有看到我所做的事情有什么问题? 我只是创build一个大小为1 x fileinfo_list的tempList 。

在C中将一个结构分配给另一个结构

你能分配一个结构的一个实例到另一个,就像这样: struct Test t1; struct Test t2; t2 = t1; 我已经看到它适用于简单的结构,它是否适用于复杂的结构? 编译器如何知道如何根据数据types复制数据项,即区分int和string?