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


6
การเริ่มต้นอาร์เรย์ถ่าน C
ฉันไม่แน่ใจว่าจะมีอะไรอยู่ในอาร์เรย์ถ่านหลังจากเริ่มต้นด้วยวิธีต่อไปนี้ 1. char buf[10] = ""; 2. char buf[10] = " "; 3.char buf[10] = "a"; สำหรับกรณีที่ 2 ผมคิดว่าbuf[0]ควรจะ' ', buf[1]ควรจะเป็น'\0'และจากbuf[2]ไปbuf[9]จะเป็นเนื้อหาที่สุ่ม สำหรับกรณีที่ 3 ผมคิดว่าbuf[0]ควรจะ'a', buf[1]ควรจะ '\ 0' และจากbuf[2]ไปbuf[9]จะเป็นเนื้อหาที่สุ่ม ถูกต้องหรือไม่ และสำหรับกรณีที่ 1 จะเป็นbufอย่างไรใน? buf[0] == '\0'และจากbuf[1]ถึงbuf[9]จะเป็นเนื้อหาแบบสุ่ม?

15
เหตุใดพอยน์เตอร์จึงไม่เริ่มต้นด้วย NULL ตามค่าเริ่มต้น
ใครช่วยอธิบายได้NULLไหมว่าทำไมพอยน์เตอร์ถึงไม่เริ่มต้น ตัวอย่าง: void test(){ char *buf; if (!buf) // whatever } โปรแกรมจะไม่เข้าไปใน if เพราะbufไม่ใช่โมฆะ ฉันต้องการทราบว่าเหตุใดเราจึงต้องมีตัวแปรที่มีถังขยะอยู่ในกรณีใดตัวชี้พิเศษที่ระบุถึงถังขยะในหน่วยความจำ

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

14
วิธีการเริ่มต้นรายการ <T> เป็นขนาดที่กำหนด (เมื่อเทียบกับความจุ)
.NET นำเสนอคอนเทนเนอร์รายการทั่วไปที่มีประสิทธิภาพเกือบเหมือนกัน (ดูคำถามประสิทธิภาพของอาร์เรย์เทียบกับรายการ) อย่างไรก็ตามมันค่อนข้างแตกต่างกันในการเริ่มต้น อาร์เรย์เป็นเรื่องง่ายมากที่จะเริ่มต้นด้วยค่าเริ่มต้นและตามความหมายพวกเขามีขนาดที่แน่นอนแล้ว: string[] Ar = new string[10]; ซึ่งช่วยให้สามารถกำหนดรายการแบบสุ่มได้อย่างปลอดภัยพูดว่า: Ar[5]="hello"; ด้วยรายการสิ่งที่ยุ่งยากกว่า ฉันสามารถเห็นสองวิธีในการเริ่มต้นเดียวกันซึ่งทั้งสองวิธีนี้ไม่ใช่สิ่งที่คุณเรียกว่าสง่างาม: List&lt;string&gt; L = new List&lt;string&gt;(10); for (int i=0;i&lt;10;i++) L.Add(null); หรือ string[] Ar = new string[10]; List&lt;string&gt; L = new List&lt;string&gt;(Ar); อะไรจะเป็นวิธีที่สะอาดกว่านี้? แก้ไข: คำตอบจนถึงตอนนี้อ้างถึงความจุซึ่งเป็นอย่างอื่นที่ไม่ใช่การเติมรายการล่วงหน้า ตัวอย่างเช่นในรายการที่เพิ่งสร้างขึ้นโดยมีความจุ 10 รายการไม่สามารถทำได้L[2]="somevalue" แก้ไข 2: ผู้คนสงสัยว่าทำไมฉันถึงต้องการใช้รายการด้วยวิธีนี้เนื่องจากไม่ใช่วิธีที่พวกเขาตั้งใจจะใช้ ฉันเห็นเหตุผลสองประการ: คนหนึ่งสามารถโต้แย้งได้อย่างน่าเชื่อว่ารายการเป็นอาร์เรย์ "รุ่นต่อไป" โดยเพิ่มความยืดหยุ่นโดยแทบไม่มีการลงโทษ ดังนั้นควรใช้เป็นค่าเริ่มต้น ฉันกำลังชี้ให้เห็นว่าอาจไม่ง่ายในการเริ่มต้น สิ่งที่ฉันกำลังเขียนอยู่คือคลาสพื้นฐานที่มีฟังก์ชันการทำงานเริ่มต้นซึ่งเป็นส่วนหนึ่งของเฟรมเวิร์กที่ใหญ่กว่า …

3
การเริ่มต้นคลาสแบบคงที่จะเกิดขึ้นเมื่อใด
ฟิลด์คงที่จะเริ่มต้นเมื่อใด ถ้าฉันไม่เคยสร้างอินสแตนซ์ของคลาส แต่ฉันเข้าถึงฟิลด์แบบคงที่บล็อกแบบคงที่และวิธีการคงที่ส่วนตัวทั้งหมดจะใช้เพื่อสร้างอินสแตนซ์ฟิลด์สแตติกส่วนตัวที่เรียกว่า (ตามลำดับ) ในทันทีนั้นหรือไม่ จะเกิดอะไรขึ้นถ้าฉันเรียกวิธีการแบบคงที่? มันยังเรียกใช้บล็อกคงที่ทั้งหมดหรือไม่ ก่อนวิธี?

10
วิธีการเริ่มต้นแผนที่ const คงที่ส่วนตัวใน C ++?
ฉันต้องการเพียงแค่พจนานุกรมหรืออาเรย์=&gt;stringint มีประเภทแผนที่ C ++ สำหรับกรณีนี้ แต่ฉันต้องการอินสแตนซ์สำหรับแผนที่เดียวเท่านั้น (-&gt; คงที่) และแผนที่นี้ไม่สามารถเปลี่ยนแปลงได้ (-&gt; const); ฉันพบวิธีนี้แล้วกับไลบรารีที่เพิ่มขึ้น std::map&lt;int, char&gt; example = boost::assign::map_list_of(1, 'a') (2, 'b') (3, 'c'); มีวิธีอื่นที่ไม่มี lib นี้หรือไม่? ฉันได้ลองสิ่งนี้แล้ว แต่มักจะมีปัญหาบางอย่างเกี่ยวกับการเริ่มต้นแผนที่ class myClass{ private: static map&lt;int,int&gt; create_map() { map&lt;int,int&gt; m; m[1] = 2; m[3] = 4; m[5] = 6; return m; } static map&lt;int,int&gt; …

8
ฉันจะเริ่มต้นรายการ C # ในบรรทัดเดียวกับที่ฉันประกาศได้อย่างไร (ตัวอย่างการรวบรวมสตริงที่ไม่สามารถคำนวณได้ของ IE)
ฉันกำลังเขียนรหัสทดสอบของฉันและฉันไม่ต้องการเขียน: List&lt;string&gt; nameslist = new List&lt;string&gt;(); nameslist.Add("one"); nameslist.Add("two"); nameslist.Add("three"); ฉันชอบที่จะเขียน List&lt;string&gt; nameslist = new List&lt;string&gt;({"one", "two", "three"}); อย่างไรก็ตาม {"one", "two", "three"} ไม่ใช่ "IEnumerable string Collection" ฉันจะเริ่มต้นสิ่งนี้ในบรรทัดเดียวโดยใช้ IEnumerable string Collection "ได้อย่างไร


5
ค่าเริ่มต้นเริ่มต้นของ std :: array?
ด้วย C ++ 11 std::arrayฉันรับประกันว่าไวยากรณ์std::array&lt;T, N&gt; x;จะเริ่มต้นองค์ประกอบทั้งหมดของอาร์เรย์เป็นค่าเริ่มต้นหรือไม่ แก้ไข : ถ้าไม่มีมีไวยากรณ์ที่จะทำงานกับอาร์เรย์ทั้งหมด (รวมถึงอาร์เรย์ขนาดศูนย์) เพื่อเริ่มต้นองค์ประกอบทั้งหมดเป็นค่าเริ่มต้นหรือไม่ แก้ไข : ในcppreferenceคำอธิบายตัวสร้างเริ่มต้นกล่าวว่า: (constructor) (implicitly declared) (public member function) default-constructs or copy-constructs every element of the array ดังนั้นคำตอบอาจเป็นใช่ แต่ฉันต้องการให้แน่ใจว่าเป็นไปตามมาตรฐานหรือมาตรฐานในอนาคต

15
เหตุใดตัวแปรท้องถิ่นจึงไม่เริ่มต้นใน Java
มีเหตุผลใดบ้างที่นักออกแบบของ Java รู้สึกว่าไม่ควรกำหนดตัวแปรภายในเครื่องให้เป็นค่าเริ่มต้น? อย่างจริงจังถ้าตัวแปรอินสแตนซ์สามารถกำหนดค่าเริ่มต้นได้ทำไมเราไม่สามารถทำเช่นเดียวกันกับตัวแปรท้องถิ่นได้? และยังนำไปสู่ปัญหาตามที่อธิบายไว้ในความคิดเห็นนี้ในบล็อกโพสต์ : กฎนี้น่าผิดหวังที่สุดเมื่อพยายามปิดทรัพยากรในการบล็อกในที่สุด หากฉันสร้างอินสแตนซ์ทรัพยากรภายในการลอง แต่พยายามปิดในที่สุดฉันได้รับข้อผิดพลาดนี้ ถ้าฉันย้ายอินสแตนซ์นอกการลองฉันได้รับข้อผิดพลาดอีกครั้งที่ระบุว่าต้องอยู่ในการลอง น่าผิดหวังมาก

10
ตัวแปรเดลฟายเริ่มต้นด้วยค่าตามค่าเริ่มต้นหรือไม่
ฉันเพิ่งเริ่มใช้ Delphi และฉันได้ทำการทดสอบเพื่อดูว่าตัวแปรออบเจ็กต์และตัวแปรสแต็กใดบ้างที่เริ่มต้นโดยค่าเริ่มต้น: TInstanceVariables = class fBoolean: boolean; // always starts off as false fInteger: integer; // always starts off as zero fObject: TObject; // always starts off as nil end; นี่เป็นพฤติกรรมที่ฉันคุ้นเคยกับภาษาอื่น แต่ฉันสงสัยว่าจะปลอดภัยหรือไม่ที่จะพึ่งพาภาษาเดลฟี? ตัวอย่างเช่นฉันสงสัยว่าอาจขึ้นอยู่กับการตั้งค่าคอมไพเลอร์หรืออาจทำงานแตกต่างกันไปในเครื่องอื่น เป็นเรื่องปกติหรือไม่ที่จะใช้ค่าเริ่มต้นที่เป็นค่าเริ่มต้นสำหรับอ็อบเจ็กต์หรือคุณตั้งค่าตัวแปรอินสแตนซ์ทั้งหมดในคอนสตรัคเตอร์อย่างชัดเจน สำหรับตัวแปรสแต็ก (ระดับขั้นตอน) การทดสอบของฉันแสดงให้เห็นว่าบูลีนที่มีการแปลงหน่วยเป็นจริงจำนวนเต็มหน่วยคือ 2129993264 และวัตถุที่ไม่ได้กำหนดค่าเริ่มต้นเป็นเพียงตัวชี้ที่ไม่ถูกต้อง (เช่นไม่ใช่ศูนย์) ฉันเดาว่าบรรทัดฐานคือต้องตั้งค่าตัวแปรระดับขั้นตอนก่อนเข้าถึงเสมอหรือไม่?

5
การเริ่มต้นอาร์เรย์บูลีนใน java
ฉันมีรหัสนี้ public static Boolean freq[] = new Boolean[Global.iParameter[2]]; freq[Global.iParameter[2]] = false; ใครช่วยบอกทีว่าฉันทำอะไรผิดที่นี่และฉันจะแก้ไขอย่างไร ฉันต้องเริ่มต้นองค์ประกอบอาร์เรย์ทั้งหมดเป็น Boolean false ขอบคุณ

7
ความสับสนเกี่ยวกับการเริ่มต้นอาร์เรย์ใน C
ในภาษา C หากเริ่มต้นอาร์เรย์เช่นนี้: int a[5] = {1,2}; จากนั้นองค์ประกอบทั้งหมดของอาร์เรย์ที่ไม่ได้เตรียมใช้งานอย่างชัดเจนจะถูกกำหนดค่าเริ่มต้นโดยปริยายด้วยศูนย์ แต่ถ้าฉันเริ่มต้นอาร์เรย์เช่นนี้: int a[5]={a[2]=1}; printf("%d %d %d %d %d\n", a[0], a[1],a[2], a[3], a[4]); เอาต์พุต: 1 0 1 0 0 ฉันไม่เข้าใจทำไมa[0]พิมพ์1แทนที่จะเป็น0? เป็นพฤติกรรมที่ไม่ได้กำหนดหรือไม่? หมายเหตุ:คำถามนี้ถูกถามในการสัมภาษณ์

7
ตั้งค่าคุณลักษณะจากพจนานุกรมใน python
เป็นไปได้ไหมที่จะสร้างวัตถุจากพจนานุกรมใน python ในลักษณะที่แต่ละคีย์เป็นแอตทริบิวต์ของวัตถุนั้น สิ่งนี้: d = { 'name': 'Oscar', 'lastName': 'Reyes', 'age':32 } e = Employee(d) print e.name # Oscar print e.age + 10 # 42 ฉันคิดว่ามันจะค่อนข้างตรงกันข้ามกับคำถามนี้: พจนานุกรม Python จากช่องของวัตถุ

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