Questions tagged «struct»

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


4
为什么结构对齐取决于字段类型是基本类型还是用户定义的?
在Noda Time v2中,我们正在向纳秒级分辨率发展。这意味着我们不能再使用8字节整数来表示我们感兴趣的整个时间范围。这促使我研究了Noda Time的(许多)结构的内存使用情况,这反过来又导致了我在CLR的一致性决定中发现一点奇怪之处。 首先,我意识到这是一个实现决策,并且默认行为可以随时更改。我意识到我可以使用[StructLayout]和对其进行修改[FieldOffset],但我想提出一个解决方案,该方案在可能的情况下不需要。 我的核心场景是,我的struct包含一个引用类型字段和两个其他值类型字段,其中这些字段是的简单包装int。我曾希望在64位CLR上将其表示为16个字节(参考为8个字节,其他每个为4个字节),但是由于某种原因,它使用了24个字节。顺便说一句,我正在使用数组来测量空间-我知道布局在不同情况下可能会有所不同,但这感觉是一个合理的起点。 这是演示该问题的示例程序: using System; using System.Runtime.InteropServices; #pragma warning disable 0169 struct Int32Wrapper { int x; } struct TwoInt32s { int x, y; } struct TwoInt32Wrappers { Int32Wrapper x, y; } struct RefAndTwoInt32s { string text; int x, y; } struct RefAndTwoInt32Wrappers { string text; Int32Wrapper …

3
将结构初始化为0
如果我有这样的结构: typedef struct { unsigned char c1; unsigned char c2; } myStruct; 将此结构初始化为0的最简单方法是什么?以下足够吗? myStruct _m1 = {0}; 还是我需要将每个成员显式初始化为0? myStruct _m2 = {0,0};
116 c  struct  initialization 

8
Javascript结构
以前,当我需要存储许多相关变量时,我将创建一个类。 function Item(id, speaker, country) { this.id = id; this.speaker = spkr; this.country = country; } var myItems = [ new Item(1, 'john', 'au'), new Item(2, 'mary', 'us') ]; 但是我想知道这是否是一个好习惯。还有其他更好的方法来模拟Javascript结构吗?
112 javascript  struct 

7
如何检查一个空的结构?
我定义一个结构... type Session struct { playerId string beehive string timestamp time.Time } 有时我给它分配一个空会话(因为nil不可能) session = Session{}; 然后我要检查是否为空: if session == Session{} { // do stuff... } 显然这是行不通的。我该怎么写?
110 struct  go 

9
C中单个结构成员的大小
我试图声明一个依赖于另一个结构的结构。我想使用sizeof它是安全/学究的。 typedef struct _parent { float calc ; char text[255] ; int used ; } parent_t ; 现在,我想声明一个结构child_t,其大小与相同parent_t.text。 我怎样才能做到这一点?(下面的伪代码。) typedef struct _child { char flag ; char text[sizeof(parent_t.text)] ; int used ; } child_t ; 我尝试了几种不同的方式与parent_t和struct _parent,但是我的编译器不接受。 作为技巧,这似乎可行: parent_t* dummy ; typedef struct _child { char flag ; char text[sizeof(dummy->text)] …
109 c  struct  sizeof 

6
C / C ++结构与类
在完成我的C ++类后,在我看来这些结构/类实际上是相同的,只是有一些细微的差别。 我以前从未用C编程过;但我确实知道它具有结构。在C语言中是否可以继承其他结构并设置public / private的修饰符? 如果您可以在常规C语言中执行此操作,那么为什么在全世界都需要C ++?是什么让类与结构不同?
108 c++  class  struct 

2
转到界面字段
我熟悉一个事实,在Go中,接口定义功能而不是数据。您在接口中放置了一组方法,但是您无法指定实现该接口的任何内容所必需的任何字段。 例如: // Interface type Giver interface { Give() int64 } // One implementation type FiveGiver struct {} func (fg *FiveGiver) Give() int64 { return 5 } // Another implementation type VarGiver struct { number int64 } func (vg *VarGiver) Give() int64 { return vg.number } 现在我们可以使用该接口及其实现: // A function …
105 struct  interface  go 

10
索引到结构是否合法?
不管代码有多“糟糕”,并假设对齐等在编译器/平台上都不是问题,这种未定义或破坏的行为是吗? 如果我有这样的结构:- struct data { int a, b, c; }; struct data thing; 它是合法的访问a,b并c作为(&thing.a)[0],(&thing.a)[1]和(&thing.a)[2]? 在每种情况下,我都会在每个编译器和平台上对其进行尝试,并在每个设置上对其进行“尝试”。我只是担心编译器可能不会意识到b和thing [1]是同一件事,并且存储到“ b”的内容可能会放在寄存器中,而thing [1]从内存中读取错误的值(例如)。在每种情况下,我都尝试过它做对了。(我当然知道并不能证明太多) 这不是我的代码;这是我必须使用的代码,我对这是不好的代码还是坏的代码很感兴趣,因为不同之处会影响我对其进行大量更改的优先级:) 标记为C和C ++。我主要是对C ++感兴趣,但对C也很感兴趣,只是出于兴趣。
104 c++  c  struct 

2
如何在Go中执行文字* int64?
我有一个带有*int64字段的结构类型。 type SomeType struct { SomeField *int64 } 在代码的某个时刻,我想声明一个字面值(例如,当我知道值应该为0或指向0时,您就知道我的意思了) instance := SomeType{ SomeField: &0, } ...除非这不起作用 ./main.go:xx: cannot use &0 (type *int) as type *int64 in field value 所以我尝试这个 instance := SomeType{ SomeField: &int64(0), } ...但是这也不起作用 ./main.go:xx: cannot take the address of int64(0) 我该怎么做呢?我唯一能想到的解决方案是使用占位符变量 var placeholder int64 placeholder = 0 …
103 pointers  go  struct  literals 

6
结构定义应该放在.h还是.c文件中?
我已经struct在标头中看到了s的完整定义,也看到了声明—一种方法比另一种方法有什么优势吗? 如果有什么不同,我通常会在 .h typedef struct s s_t; 编辑 为了清楚起见,选项是头文件中的声明和类中的定义,或者头文件中的声明和定义。两者都应该导致相同的可用性,即使是通过链接实现的,不是吗? 我看到很多几乎重复的内容,例如,这里没有完全匹配的内容。如果我在这方面错了,请纠正我。
102 c  header  struct 

7
您如何在C中制作结构数组?
我正在尝试制作一系列结构,其中每个结构都代表一个天体。 我对结构没有太多的经验,这就是为什么我决定尝试使用它们而不是一堆数组的原因。但是,我不断遇到许多不同的错误。我试图实现在各种线程和StackOverflow上看到的技术(例如C和C中的结构体数组-初始化结构体数组)),但是并不是所有的人都是适用的。 对于那些到目前为止已经读过的人的更多信息:我不需要任何这些都是动态的,我事先知道/定义了所有内容的大小。我还需要将其作为一个全局数组,因为我正在使用几种定义了自变量的方法(即GLUT方法)来访问它。 这就是我在标头中定义结构的方式: struct body { double p[3];//position double v[3];//velocity double a[3];//acceleration double radius; double mass; }; 在定义结构的内部之前,我还有一个要定义的其他全局变量的列表,其中一个是该结构的数组(基本上,如果我不太清楚,请看下面的代码高于上述内容): struct body bodies[n]; 请注意,n这是我合理定义的内容(即#define n 1)。 我以几种不同的方法使用此数组,但是最简单,最不占用空间的是我的main的简化形式。在这里,我初始化每个结构中的所有变量,只是在以某种方式修改它们之前设置某些变量: int a, b; for(a = 0; a < n; a++) { for(b = 0; b < 3; b++) { bodies[a].p[b] = 0; bodies[a].v[b] = …
100 c  arrays  struct 

6
如何在Swift中使用SCNetworkReachability
我正在尝试将此代码段转换为Swift。由于某些困难,我正在努力下车。 - (BOOL) connectedToNetwork { // Create zero addy struct sockaddr_in zeroAddress; bzero(&zeroAddress, sizeof(zeroAddress)); zeroAddress.sin_len = sizeof(zeroAddress); zeroAddress.sin_family = AF_INET; // Recover reachability flags SCNetworkReachabilityRef defaultRouteReachability = SCNetworkReachabilityCreateWithAddress(NULL, (struct sockaddr *)&zeroAddress); SCNetworkReachabilityFlags flags; BOOL didRetrieveFlags = SCNetworkReachabilityGetFlags(defaultRouteReachability, &flags); CFRelease(defaultRouteReachability); if (!didRetrieveFlags) { return NO; } BOOL isReachable = flags & …
99 ios  c  struct  swift  reachability 

1
struct声明末尾的[1]的目的是什么?
我正在窥探MSP430微控制器的头文件,并且在<setjmp.h>以下位置遇到了这个问题: /* r3 does not have to be saved */ typedef struct { uint32_t __j_pc; /* return address */ uint32_t __j_sp; /* r1 stack pointer */ uint32_t __j_sr; /* r2 status register */ uint32_t __j_r4; uint32_t __j_r5; uint32_t __j_r6; uint32_t __j_r7; uint32_t __j_r8; uint32_t __j_r9; uint32_t __j_r10; uint32_t __j_r11; } …

7
快速和变异结构
对于Swift中的值类型突变,我有些不了解。 正如iBook的“ Swift编程语言”所言: 默认情况下,不能从其实例方法中修改值类型的属性。 因此,为了使之成为可能,我们可以mutating在structs和enums中使用关键字声明方法。 对我来说还不完全清楚的事情是:您可以从结构外部更改var,但是不能从其自己的方法更改它。这对我来说似乎违反直觉,因为在面向对象的语言中,您通常尝试封装变量,以便只能从内部进行更改。对于结构,这似乎是另一回事。详细来说,这是一个代码片段: struct Point { var x = 0, y = 0 mutating func moveToX(x: Int, andY y:Int) { //Needs to be a mutating method in order to work self.x = x self.y = y } } var p = Point(x: 1, y: 2) p.x = …

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.