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

sizeof หมายถึงตัวดำเนินการ C / C ++ มาตรฐานสำหรับการส่งคืนขนาดเป็นไบต์ของนิพจน์หรือประเภทข้อมูล


13
ฉันจะกำหนดขนาดของวัตถุใน Python ได้อย่างไร
ฉันต้องการทราบวิธีรับขนาดของวัตถุเช่นสตริงจำนวนเต็ม ฯลฯ ใน Python คำถามที่เกี่ยวข้อง: มีกี่ไบต์ต่อองค์ประกอบในรายการ Python (tuple) ฉันใช้ไฟล์ XML ซึ่งมีฟิลด์ขนาดที่ระบุขนาดของค่า ฉันต้องแยกวิเคราะห์ XML นี้และทำการเข้ารหัสของฉัน เมื่อฉันต้องการเปลี่ยนค่าของฟิลด์ใดฟิลด์หนึ่งฉันจะตรวจสอบฟิลด์ขนาดของค่านั้น ที่นี่ฉันต้องการเปรียบเทียบว่าค่าใหม่ที่ฉันป้อนฆ้องมีขนาดเดียวกันกับใน XML ฉันต้องตรวจสอบขนาดของค่าใหม่ ในกรณีของสตริงฉันสามารถพูดความยาวได้ แต่ในกรณีของ int, float ฯลฯ ฉันสับสน

9
เหตุใดขนาดของ (x ++) จึงไม่เพิ่มขึ้น x
นี่คือโค้ดที่คอมไพล์ใน windows dev c ++: #include <stdio.h> int main() { int x = 5; printf("%d and ", sizeof(x++)); // note 1 printf("%d\n", x); // note 2 return 0; } ผมคาดว่าxจะเป็น 6 หลังจากรัน1 ข้อความ อย่างไรก็ตามผลลัพธ์คือ: 4 and 5 ทุกคนสามารถอธิบายได้ว่าทำไมxไม่ได้เพิ่มขึ้นหลังจากที่ทราบ 1 ?
505 c  sizeof 

13
วิธีค้นหา 'sizeof' (ตัวชี้ที่ชี้ไปยังอาร์เรย์)
ก่อนอื่นนี่คือรหัสบางส่วน: int main() { int days[] = {1,2,3,4,5}; int *ptr = days; printf("%u\n", sizeof(days)); printf("%u\n", sizeof(ptr)); return 0; } มีวิธีการหาขนาดของอาเรย์ที่ptrชี้ไป (แทนที่จะแค่ให้ขนาดของมันซึ่งเป็นสี่ไบต์บนระบบ 32 บิต)?
309 c  arrays  pointers  sizeof 

19
จะรับขนาดของวัตถุ JavaScript ได้อย่างไร
ฉันต้องการทราบขนาดที่ครอบครองโดยวัตถุ JavaScript ใช้ฟังก์ชั่นต่อไปนี้: function Marks(){ this.maxMarks = 100; } function Student(){ this.firstName = "firstName"; this.lastName = "lastName"; this.marks = new Marks(); } ตอนนี้ฉันยกตัวอย่างstudent: var stud = new Student(); เพื่อให้ฉันสามารถทำสิ่งที่ชอบ stud.firstName = "new Firstname"; alert(stud.firstName); stud.marks.maxMarks = 200; เป็นต้น ตอนนี้studวัตถุจะครอบครองขนาดในหน่วยความจำ มันมีข้อมูลและวัตถุมากกว่านี้ ฉันจะรู้ได้อย่างไรว่าหน่วยความจำstudนั้นมีวัตถุอยู่มากแค่ไหน? สิ่งที่ชอบsizeof()ใน JavaScript? sizeof(stud)มันจะน่ากลัวจริงๆว่าฉันจะพบว่ามันออกมาในการเรียกใช้ฟังก์ชันเดียวเช่น ฉันค้นหาอินเทอร์เน็ตมาหลายเดือนแล้ว - หาไม่เจอ (ถามในฟอรัมสองแห่ง - ไม่มีการตอบกลับ)


7
เหตุใด“ sizeof (a? true: false)” จึงให้เอาต์พุตสี่ไบต์
ฉันมีโค้ดเล็ก ๆ เกี่ยวกับตัวsizeofดำเนินการกับตัวดำเนินการที่เกี่ยวข้อง: #include <stdio.h> #include <stdbool.h> int main() { bool a = true; printf("%zu\n", sizeof(bool)); // Ok printf("%zu\n", sizeof(a)); // Ok printf("%zu\n", sizeof(a ? true : false)); // Why 4? return 0; } เอาท์พุท ( GCC ): 1 1 4 // Why 4? แต่ที่นี่, printf("%zu\n", sizeof(a ? true : …

4
ทำไม sizeof (my_arr) [0] จึงคอมไพล์และเท่ากับ sizeof (my_arr [0])
ทำไมโค้ดนี้จึงคอมไพล์ _Static uint32_t my_arr[2]; _Static_assert(sizeof(my_arr) == 8, ""); _Static_assert(sizeof(my_arr[0]) == 4, ""); _Static_assert(sizeof(my_arr)[0] == 4, ""); การยืนยัน 2 รายการแรกนั้นถูกต้อง แต่ฉันคาดว่าบรรทัดสุดท้ายจะล้มเหลวเนื่องจากความเข้าใจของฉันคือsizeof()ควรประเมินเป็นลิเทอรัลจำนวนเต็มซึ่งไม่สามารถถือเป็นอาร์เรย์ได้ กล่าวอีกนัยหนึ่งมันจะล้มเหลวในลักษณะเดียวกับที่บรรทัดต่อไปนี้ล้มเหลว: _Static_assert(4[0] == 4, ""); ที่น่าสนใจสิ่งต่อไปนี้ไม่สามารถรวบรวมได้อย่างแท้จริง (ซึ่งควรทำในสิ่งเดียวกันไม่ใช่หรือ): _Static_assert(*sizeof(my_arr) == 4, ""); ข้อผิดพลาด: อาร์กิวเมนต์ประเภทที่ไม่ถูกต้องของ unary '*' (have 'long unsigned int') _Static_assert (* sizeof (my_arr) == 4, ""); ถ้าเป็นเรื่องสำคัญฉันใช้ gcc 5.3.0
129 c  sizeof 

4
sizeof (bool) ถูกกำหนดไว้ในมาตรฐานภาษา C ++ หรือไม่
ฉันไม่พบคำตอบในเอกสารมาตรฐาน มาตรฐานของภาษา C ++ จำเป็นต้องsizeof(bool)เป็น 1 เสมอ (สำหรับ 1 ไบต์) หรือมีการกำหนดการใช้งานขนาดนี้หรือไม่


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 

13
เหตุใดขนาดของพารามิเตอร์อาร์เรย์จึงไม่เหมือนกับภายใน main
เหตุใดขนาดของอาร์เรย์ที่ส่งเป็นพารามิเตอร์จึงไม่เหมือนกับภายใน main #include <stdio.h> void PrintSize(int p_someArray[10]); int main () { int myArray[10]; printf("%d\n", sizeof(myArray)); /* As expected, 40 */ PrintSize(myArray);/* Prints 4, not 40 */ } void PrintSize(int p_someArray[10]){ printf("%d\n", sizeof(p_someArray)); }
104 c  arrays  function  sizeof 

12
เหตุใดตัวอักษรตัวอักษร C จึงอยู่ภายในแทนอักขระ
ใน C sizeof('a') == sizeof(char) == 1++, สิ่งนี้ทำให้เข้าใจง่ายเนื่องจาก'a'เป็นอักขระตามตัวอักษรและsizeof(char) == 1ตามที่กำหนดโดยมาตรฐาน ใน C อย่างไรก็ตามsizeof('a') == sizeof(int). นั่นคือดูเหมือนว่าอักษรตัวอักษร C เป็นจำนวนเต็ม มีใครรู้บ้างว่าทำไม? ฉันสามารถค้นหาการกล่าวถึง C quirk นี้ได้มากมาย แต่ไม่มีคำอธิบายว่าเหตุใดจึงมีอยู่
103 c++  c  char  sizeof 

3
ทำไม sizeof int จึงผิดในขณะที่ sizeof (int) ถูกต้อง
เราทราบดีว่าsizeofเป็นโอเปอเรเตอร์ที่ใช้สำหรับคำนวณขนาดของประเภทข้อมูลและนิพจน์ใด ๆ และเมื่อตัวถูกดำเนินการเป็นนิพจน์คุณสามารถละวงเล็บได้ int main() { int a; sizeof int; sizeof( int ); sizeof a; sizeof( a ); return 0; } การใช้ครั้งแรกsizeofผิดในขณะที่คนอื่นถูก เมื่อคอมไพล์โดยใช้ gcc ข้อความแสดงข้อผิดพลาดต่อไปนี้จะได้รับ: main.c:5:9: error: expected expression before ‘int’ คำถามของฉันคือเหตุใดมาตรฐาน C จึงไม่อนุญาตให้มีการทำงานแบบนี้ จะsizeof intทำให้เกิดความคลุมเครือหรือไม่
97 c++  c  sizeof 


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