คำถามติดแท็ก struct

คำหลักในภาษาการเขียนโปรแกรมต่างๆที่มีไวยากรณ์คล้ายกับหรือมาจาก C (C ++, C #, Swift, Go, Rust, ฯลฯ ) ใช้แท็กภาษาการเขียนโปรแกรมเฉพาะเพื่อติดแท็กคำถามเกี่ยวกับการใช้ `struct 'เนื่องจากไวยากรณ์และซีแมนทิกส์นั้นขึ้นอยู่กับภาษา คำหลักกำหนดหรือประกาศประเภทข้อมูลที่ประกอบด้วยประเภทข้อมูลอื่น สมาชิกของโครงสร้างแต่ละคนมีพื้นที่หน่วยความจำของตัวเอง (ตรงข้ามกับ "สหภาพ" ซึ่งสมาชิกแบ่งปันพื้นที่หน่วยความจำเดียว)

10
ทำไมโครงสร้างไม่รองรับการสืบทอด
ฉันรู้ว่าโครงสร้างใน. NET ไม่รองรับการสืบทอด แต่ไม่ชัดเจนว่าทำไมจึงถูก จำกัด ด้วยวิธีนี้ เหตุผลทางเทคนิคใดที่ป้องกันไม่ให้โครงสร้างรับช่วงจากโครงสร้างอื่น ๆ
129 .net  inheritance  struct 

4
เหตุใดการจัดแนวโครงสร้างจึงขึ้นอยู่กับว่าประเภทฟิลด์เป็นแบบดั้งเดิมหรือผู้ใช้กำหนด
ในNoda Time v2 เรากำลังเคลื่อนไปสู่ความละเอียดระดับนาโนวินาที นั่นหมายความว่าเราไม่สามารถใช้จำนวนเต็ม 8 ไบต์เพื่อแสดงช่วงเวลาทั้งหมดที่เราสนใจได้อีกต่อไปนั่นทำให้ฉันต้องตรวจสอบการใช้หน่วยความจำของโครงสร้าง (จำนวนมาก) ของ Noda Time ซึ่งทำให้ฉัน เพื่อเปิดเผยความแปลกประหลาดเล็กน้อยในการตัดสินใจจัดตำแหน่งของ CLR ประการแรกผมรู้ว่านี่คือการตัดสินใจการดำเนินงานและการทำงานเริ่มต้นอาจมีการเปลี่ยนแปลงได้ตลอดเวลา ฉันรู้ว่าฉันสามารถแก้ไขได้โดยใช้[StructLayout]และ[FieldOffset]แต่ฉันอยากจะหาวิธีแก้ปัญหาที่ไม่ต้องการสิ่งนั้นถ้าเป็นไปได้ สถานการณ์หลักของฉันที่ฉันมีstructซึ่งมีข้อมูลอ้างอิงและแบบสองช่องค่าชนิดอื่น ๆ intที่มีเขตข้อมูลเหล่านั้นห่อง่ายสำหรับ ฉันหวังว่าจะแสดงเป็น 16 ไบต์บน 64-bit CLR (8 สำหรับการอ้างอิงและ 4 สำหรับแต่ละอัน) แต่ด้วยเหตุผลบางประการจึงใช้ 24 ไบต์ ฉันกำลังวัดพื้นที่โดยใช้อาร์เรย์ - ฉันเข้าใจว่าการจัดวางอาจแตกต่างกันในสถานการณ์ที่แตกต่างกัน แต่นี่เป็นจุดเริ่มต้นที่สมเหตุสมผล นี่คือโปรแกรมตัวอย่างที่แสดงให้เห็นถึงปัญหา: using System; using System.Runtime.InteropServices; #pragma warning disable 0169 struct Int32Wrapper { int x; } …

3
การเริ่มต้นโครงสร้างเป็น 0
ถ้าฉันมีโครงสร้างแบบนี้: typedef struct { unsigned char c1; unsigned char c2; } myStruct; อะไรคือวิธีที่ง่ายที่สุดในการเริ่มต้นโครงสร้างนี้เป็น 0 ต่อไปนี้จะเพียงพอหรือไม่? myStruct _m1 = {0}; หรือฉันจะต้องทำให้สมาชิกแต่ละคนเป็น 0 อย่างชัดเจน? myStruct _m2 = {0,0};
116 c  struct  initialization 

2
ฉันจะทำลิเทอรัล * int64 ใน Go ได้อย่างไร
ฉันมีประเภทโครงสร้างที่มี*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) …
116 pointers  go  struct  literals 

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 } บางครั้งฉันกำหนดเซสชันว่างให้กับมัน (เพราะไม่มีศูนย์) session = Session{}; จากนั้นฉันต้องการตรวจสอบว่าว่างเปล่า: if session == Session{} { // do stuff... } เห็นได้ชัดว่านี่ใช้งานไม่ได้ ฉันจะเขียนมันได้อย่างไร?
112 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 …
109 c  struct  sizeof 

6
โครงสร้าง C / C ++ เทียบกับคลาส
หลังจากจบคลาส C ++ สำหรับฉันแล้วโครงสร้าง / คลาสแทบจะเหมือนกันยกเว้นมีความแตกต่างเล็กน้อยเล็กน้อย ฉันไม่เคยตั้งโปรแกรมใน C มาก่อน แต่ฉันรู้ว่ามันมีโครงสร้าง ใน C เป็นไปได้ไหมที่จะสืบทอดโครงสร้างอื่น ๆ และตั้งค่าตัวปรับแต่งของสาธารณะ / ส่วนตัว? ถ้าคุณทำได้ใน C ปกติทำไมเราถึงต้องการ C ++ ในโลกนี้? อะไรทำให้คลาสแตกต่างจากโครงสร้าง?
109 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 …
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' ไว้ในรีจิสเตอร์และสิ่งที่ [1] อ่านค่าผิดจากหน่วยความจำ (เช่น) ในทุกกรณีฉันพยายามทำในสิ่งที่ถูกต้อง (ฉันรู้แน่นอนว่ามันไม่ได้พิสูจน์อะไรมาก) นี่ไม่ใช่รหัสของฉัน มันรหัสฉันต้องทำงานกับฉันสนใจไม่ว่าจะเป็นที่ไม่ดีรหัสหรือเสียรหัสที่แตกต่างกันมีผลต่อการจัดลำดับความสำคัญของฉันสำหรับการเปลี่ยนแปลงการจัดการที่ดี :) ติดแท็ก C และ C ++ ฉันสนใจ C ++ เป็นส่วนใหญ่ แต่ยังรวมถึง C …
104 c++  c  struct 

6
คำจำกัดความของโครงสร้างควรอยู่ในไฟล์. h หรือ. c?
ฉันเห็นทั้งคำจำกัดความแบบเต็มของstructs ในส่วนหัวและเพียงแค่การประกาศ - วิธีหนึ่งมีข้อดีกว่าวิธีอื่นหรือไม่ ถ้ามันสร้างความแตกต่างฉันมักจะพิมพ์โครงสร้างแบบนี้ในไฟล์ .h typedef struct s s_t; แก้ไข เพื่อความชัดเจนอ็อพชันคือการประกาศในไฟล์ส่วนหัวและนิยามในคลาสหรือทั้งการประกาศและนิยามในไฟล์ส่วนหัว ทั้งสองอย่างควรส่งผลให้สามารถใช้งานได้เหมือนกันแม้ว่าจะมีการเชื่อมโยงกันก็ตาม ฉันเห็นรายการเกือบซ้ำกันหลายรายการเช่นที่นี่แต่ไม่มีรายการที่ตรงกันทั้งหมด โปรดแก้ไขฉันหากฉันผิดในเรื่องนี้
102 c  header  struct 

7
คุณสร้างอาร์เรย์ของโครงสร้างใน C ได้อย่างไร?
ฉันกำลังพยายามสร้างอาร์เรย์ของโครงสร้างโดยแต่ละโครงสร้างแทนเทห์ฟากฟ้า ฉันไม่มีประสบการณ์กับโครงสร้างมากขนาดนั้นซึ่งเป็นเหตุผลว่าทำไมฉันจึงตัดสินใจลองใช้มันแทนอาร์เรย์ทั้งหมด อย่างไรก็ตามฉันยังคงพบข้อผิดพลาดต่างๆมากมาย ฉันได้พยายามใช้เทคนิคที่ฉันเคยเห็นในเธรดต่างๆและบน StackOverflow (เช่นArray of structs ใน 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) ฉันใช้อาร์เรย์นี้ในหลายวิธี แต่วิธีที่ง่ายที่สุดและใช้พื้นที่น้อยที่สุดคือรูปแบบที่เรียบง่ายของ …
101 c  arrays  struct 

8
ไม่พบตัวดำเนินการ == ขณะเปรียบเทียบโครงสร้างใน C ++
เมื่อเปรียบเทียบสองอินสแตนซ์ของโครงสร้างต่อไปนี้ฉันได้รับข้อผิดพลาด: struct MyStruct1 { MyStruct1(const MyStruct2 &_my_struct_2, const int _an_int = -1) : my_struct_2(_my_struct_2), an_int(_an_int) {} std::string toString() const; MyStruct2 my_struct_2; int an_int; }; ข้อผิดพลาดคือ: ข้อผิดพลาด C2678: binary '==': ไม่พบตัวดำเนินการที่ใช้ตัวถูกดำเนินการด้านซ้ายประเภท 'myproj :: MyStruct1' (หรือไม่มีการแปลงที่ยอมรับได้) ทำไม?

8
โครงสร้างที่รวดเร็วและกลายพันธุ์
มีบางอย่างที่ฉันไม่เข้าใจทั้งหมดเกี่ยวกับการกลายพันธุ์ประเภทค่าใน Swift เนื่องจากสถานะ iBook "The Swift Programming Language": โดยค่าเริ่มต้นคุณสมบัติของประเภทค่าไม่สามารถแก้ไขได้จากวิธีการอินสแตนซ์ ดังนั้นเพื่อให้เป็นไปได้เราสามารถประกาศวิธีการโดยใช้mutatingคีย์เวิร์ดภายในโครงสร้างและ 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 …
101 struct  value-type  swift 

7
วิธีใช้ SCNetworkReachability ใน Swift
ฉันกำลังพยายามแปลงข้อมูลโค้ดนี้เป็น 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 = …
99 ios  c  struct  swift  reachability 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.