Questions tagged «struct»

各种编程语言中的关键字,其语法类似于或衍生自C(C ++,C#,Swift,Go,Rust等)。使用特定的编程语言标签来标记涉及使用“ struct”的问题,因为语法和语义可能取决于语言。关键字定义或声明由其他数据类型组成的数据类型。结构的每个成员都有其自己的内存区域(与“ union”相反,后者的成员共享一个内存区域)。


2
易变结构语义
将结构类型变量的实例声明为volatile是否足够(如果其字段以可重入代码访问),还是必须将结构的特定字段声明为volatile? 措辞不同,以下两者之间的语义差异(如果有): typdef struct { uint8_t bar; } foo_t; volatile foo_t foo_inst; 和 typedef struct{ volatile uint8_t bar; } foo_t; foo_t foo_inst; 我认识到,将指针类型的变量声明为volatile(例如volatile uint8_t * foo)仅通知编译器foo指向的地址可能会更改,而没有声明foo指向的值。对我来说还不清楚结构类型变量是否适用类推。
74 c  struct  volatile 

7
将struct复制到C中的struct
我想将一个相同的结构复制到另一个结构中,以后再与第一个结构进行比较。问题是当我这样做时,我的编译器会警告我!我应该用其他方式还是做错了呢? 在头文件中: 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); }
74 c  struct  copy  microchip 

10
如何检查C中某个变量是否属于某种类型(比较两种类型)?
在C(不是C ++ / C#)中,如何检查变量是否为某种类型? 例如,如下所示: double doubleVar; if( typeof(doubleVar) == double ) { printf("doubleVar is of type double!"); } 或更笼统:我如何比较两种类型,以便compare(double1,double2)评估为true,而compare(int,double)评估为false。我也想比较不同组成的结构。 基本上,我有一个对类型“ struct a”和“ struct b”的变量进行操作的函数。我想用“ struct a”变量做一件事,而用“ struct b”变量做另一件事。由于C不支持重载,并且void指针丢失了其类型信息,因此我需要检查类型。顺便说一句,typeof如果您不能比较类型,那么拥有运算符会有什么意义? sizeof方法对我来说似乎是一种实际的解决方法。谢谢你的帮助。我仍然发现它有点奇怪,因为类型是在编译时就知道的,但是如果我能想象我可以看到机器中的进程,为什么信息不是按类型存储,而是按字节大小存储。大小是唯一真正有意义的,除了地址。
73 c  types  struct 

5
何时在Ruby中使用Struct代替Hash?
我没有太多的编程经验。但是,对我来说,Struct似乎有点类似于Hash。 Struct可以做什么好? Struct能做些什么,而Hash做不到? 谷歌搜索之后,Struct的概念在C中很重要,但是我对C并不了解。
72 ruby  hash  struct 

8
将结构保存到UserDefaults
我有一个要保存到UserDefaults的结构。这是我的结构 struct Song { var title: String var artist: String } var songs: [Song] = [ Song(title: "Title 1", artist "Artist 1"), Song(title: "Title 2", artist "Artist 2"), Song(title: "Title 3", artist "Artist 3"), ] 在另一个ViewController中,我有一个UIButton附加到此结构,例如 @IBAction func likeButtonPressed(_ sender: Any) { songs.append(Song(title: songs[thisSong].title, artist: songs[thisSong].artist)) } 我想要它,以便每当用户单击该按钮时,它也将结构保存到UserDefaults,以便每当用户退出应用程序然后将其打开时,它都会被保存。我该怎么做?

9
C ++:结构可以从类继承吗?
我正在查看我正在使用的API的实现。 我注意到结构是从类继承而来的,我停下来思考一下…… 首先,我没有在研究的C ++手册中看到某个结构可以从另一个结构继承: struct A {}; struct B : public A {}; 我猜想在这种情况下,结构B继承了结构A中的所有数据。我们可以在结构中声明公共/私有成员吗? 但是我注意到了这一点: class A {}; struct B : public A {}; 从我的在线C ++手册中: 类是一数据结构的一个扩展的概念:不是只持有数据,它可以容纳两个数据和功能。 即使类A具有某些成员函数,上述继承也有效吗?当结构继承它们时,函数会发生什么?而相反呢:从结构继承的类呢? 实际上,我有这个: struct user_messages { std::list<std::string> messages; }; 而且我经常这样迭代foreach message in user_messages.messages。 如果要向结构中添加成员函数,是否可以更改其声明并将其“提升”为类,添加函数,并且仍然像以前一样遍历user_messages.messages? 显然,我仍然是新手,我仍然不清楚结构和类之间如何交互,两者之间的实际区别是什么,继承规则是什么...

2
为什么具有可为空值的结构的HashSets会异常慢?
我调查了性能下降,并将其跟踪到缓慢的HashSet。 我有带有可为空值的结构,用作主键。例如: public struct NullableLongWrapper { private readonly long? _value; public NullableLongWrapper(long? value) { _value = value; } } 我注意到创建A的HashSet<NullableLongWrapper>过程非常缓慢。 这是使用BenchmarkDotNet的示例:(Install-Package BenchmarkDotNet) using System.Collections.Generic; using System.Linq; using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Configs; using BenchmarkDotNet.Jobs; using BenchmarkDotNet.Running; public class Program { static void Main() { BenchmarkRunner.Run<HashSets>(); } } public class Config : ManualConfig …
69 c#  .net  performance  struct 

6
关键字“ new”对C#中的结构有什么作用?
在C#中,结构是根据值进行管理的,而对象是引用的。据我了解,在创建类的实例时,该关键字new使C#使用类信息来创建该实例,如下所示: class MyClass { ... } MyClass mc = new MyClass(); 对于struct,您不是在创建对象,而只是将变量设置为值: struct MyStruct { public string name; } MyStruct ms; //MyStruct ms = new MyStruct(); ms.name = "donkey"; 我不明白的是,如果通过声明变量MyStruct ms = new MyStruct(),new这里的关键字对语句有什么作用?。如果struct不能是对象,那么new这里的实例化是什么?
69 c#  object  struct 

14
隐藏C结构中的成员
我一直在阅读有关C语言中的OOP的知识,但我从未喜欢过如何像C ++中那样拥有私有数据成员。但是后来我想到可以创建2个结构。一个在头文件中定义,另一个在源文件中定义。 // ========================================= // in somestruct.h typedef struct { int _public_member; } SomeStruct; // ========================================= // in somestruct.c #include "somestruct.h" typedef struct { int _public_member; int _private_member; } SomeStructSource; SomeStruct *SomeStruct_Create() { SomeStructSource *p = (SomeStructSource *)malloc(sizeof(SomeStructSource)); p->_private_member = 42; return (SomeStruct *)p; } 从这里您可以将一个结构转换为另一个结构。这被认为是不良做法吗?还是经常做?

4
在结构数组的末尾需要空括号'{}'是什么?
我在Linux内核中命中了一些C 代码: static struct ctl_table ip_ct_sysctl_table[] = { { .procname = "ip_conntrack_max", .maxlen = sizeof(int), .mode = 0644, .proc_handler = proc_dointvec, }, // ... { .procname = "ip_conntrack_log_invalid", .maxlen = sizeof(unsigned int), .mode = 0644, .proc_handler = proc_dointvec_minmax, .extra1 = &log_invalid_proto_min, .extra2 = &log_invalid_proto_max, }, { } }; 这里的结构数组以结尾{ }。它是出于什么目的添加的? …

1
C语言中重叠对象的语义是什么?
考虑以下结构: struct s { int a, b; }; 通常为1,此结构的大小为8,对齐方式为4。 如果我们创建两个struct s对象(更准确地说,我们将两个这样的对象写入分配的存储区),而第二个对象与第一个对象重叠怎么办? char *storage = malloc(3 * sizeof(struct s)); struct s *o1 = (struct s *)storage; // offset 0 struct s *o2 = (struct s *)(storage + alignof(struct s)); // offset 4 // now, o2 points half way into o1 *o1 …

2
[[no_unique_address]]和两个相同类型的成员值
我玩弄[[no_unique_address]]在c++20。 在cppreference的示例中,我们有一个空类型Empty和Z struct Empty {}; // empty class struct Z { char c; [[no_unique_address]] Empty e1, e2; }; 显然,的大小Z至少必须是2因为e1和的类型e2相同。 但是,我真的很想拥有Zsize 1。这让我开始思考,如何Empty在包装类中使用额外的模板参数来包装,这些模板参数会强制执行e1和类型的不同e2。 template <typename T, int i> struct Wrapper : public T{}; struct Z1 { char c; [[no_unique_address]] Wrapper<Empty,1> e1; [[no_unique_address]] Wrapper<Empty,2> e2; }; 不幸的是,sizeof(Z1)==2。是否有使大小Z1成为一体的技巧? 我有测试此gcc version 9.2.1与clang version 9.0.0 在我的应用程序中,我有很多空类型的表格 …

6
如何在C ++中比较泛型结构?
我想以一种通用的方式比较结构,并且我做了这样的事情(我无法共享实际的源代码,因此如有必要,请提供更多详细信息): template<typename Data> bool structCmp(Data data1, Data data2) { void* dataStart1 = (std::uint8_t*)&data1; void* dataStart2 = (std::uint8_t*)&data2; return memcmp(dataStart1, dataStart2, sizeof(Data)) == 0; } 这通常可以按预期工作,但有时即使两个结构实例具有相同的成员(我已经使用eclipse调试器进行了检查),它有时仍返回false。经过一些搜索,我发现memcmp由于填充了所使用的结构而导致失败。 有没有比较合适的内存填充方式?我无法修改所使用的结构(它们是我正在使用的API的一部分),并且所使用的许多不同结构具有一些不同的成员,因此无法以一般方式进行单独比较(据我所知)。 编辑:不幸的是,我坚持使用C ++ 11。应该早些提到...
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.