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

C เป็นภาษาโปรแกรมทั่วไปที่ใช้สำหรับการเขียนโปรแกรมระบบ (ระบบปฏิบัติการและฝังตัว), ห้องสมุด, เกมและข้ามแพลตฟอร์ม แท็กนี้ควรใช้กับคำถามทั่วไปที่เกี่ยวข้องกับภาษา C ตามที่กำหนดไว้ในมาตรฐาน ISO 9899 (เวอร์ชันล่าสุด 9899: 2018 เว้นแต่ระบุไว้เป็นอย่างอื่น - นอกจากนี้ยังติดแท็กคำขอเฉพาะรุ่นด้วย c89, c99, c11 ฯลฯ ) C แตกต่างจาก C ++ และไม่ควรใช้ร่วมกับแท็ก C ++ หากไม่มีเหตุผล

2
จะเกิดอะไรขึ้นถ้าพฤติกรรม C ++ ที่ไม่ได้กำหนดตรงกับพฤติกรรมที่กำหนดไว้ C?
ฉันมี*.cppไฟล์ที่คอมไพล์ด้วย C ++ (ไม่ใช่คอมไพเลอร์ C) ฟังก์ชั่นที่มีอยู่อาศัยนักแสดง (ดูบรรทัดสุดท้าย) ซึ่งดูเหมือนว่าจะถูกกำหนดใน C (โปรดแก้ไขถ้าฉันผิด!) แต่ไม่ใช่ใน C ++ สำหรับประเภทพิเศษนี้ [...] C++ code [...] struct sockaddr_in sa = {0}; int sockfd = ...; sa.sin_family = AF_INET; sa.sin_port = htons(port); bind(sockfd, (struct sockaddr *)&sa, sizeof sa); [...] C++ code [...] เนื่องจากฉันคอมไพล์ไฟล์นี้ในไฟล์ C ++ ตอนนี้มันเป็นพฤติกรรมที่กำหนดหรือไม่ได้กำหนดหรือไม่? หรือฉันจะต้องย้ายสิ่งนี้เป็น*.cไฟล์เพื่อให้มันเป็นพฤติกรรมที่กำหนดไว้?

3
อะไรคือคำจำกัดความของคำนิยามของสตริงใน C?
ฉันควรจะตอบคำถามการบ้านสำหรับชั้นเรียนของฉัน โดยเฉพาะฉันควรจะบอกว่าอาร์เรย์บางตัวใน C ถือเป็นสตริงหรือไม่ อ้างอิงจากบทความนี้ ( https://www.geeksforgeeks.org/strings-in-c-2/ ) ฉันรู้ว่าสตริงนั้นเป็นอาร์เรย์ของตัวละครที่มีตัวสิ้นสุด null ในตอนท้าย Hangup หลักของฉันเป็นส่วนหนึ่งของคำถามที่ถามเกี่ยวกับอาร์เรย์ที่มีลักษณะดังนี้: char c1[] = { 'C', 'S', '\0', '3', '2', '4', '\0' }; เห็นได้ชัดว่านี่คืออาเรย์ของอักขระที่มีอักขระสิ้นสุดในตอนท้าย อย่างไรก็ตามมันยังถือว่าเป็นสตริงเพราะมันยังมีอักขระยุติกลางที่? สิ่งนั้นจะมีผลกับสตริงอย่างไร? แก้ไข: จากความคิดเห็นฉันได้ให้ถ้อยคำที่แท้จริงของคำถาม: "อาร์เรย์ใดต่อไปนี้ถือเป็น" สตริง "เพื่อจุดประสงค์ในการใช้เป็นอาร์กิวเมนต์สำหรับ strcpy (), strncpy (), strcmp (), strcmp (), strncmp () และฟังก์ชั่นสตริงที่คล้ายกัน (ระบุถึงการใช้ทั้งหมด)" แก้ไข: ฉันส่งอีเมลถึงอาจารย์ของฉันเกี่ยวกับเรื่องนี้เนื่องจากคำถามดูเหมือนจะคลุมเครือคำ (หลายคนชี้ให้เห็น) ถ้าใครอยากรู้อยากเห็นเขาบอกฉันว่า "ใช่มันเป็นสตริงที่สำคัญคือว่ามีตัวละครที่เป็นโมฆะ …

1
การแปลงเป็นโมฆะ ** บนคอมไพเลอร์ต่างกัน
ฉันใช้รหัสต่อไปนี้ผ่านคอมไพเลอร์ต่าง ๆ : int main() { float **a; void **b; b = a; } จากสิ่งที่ฉันได้รับสามารถที่จะรวบรวมvoid **เป็นไม่ได้เป็นตัวชี้ทั่วไปซึ่งหมายความว่าการแปลงใด ๆ จากตัวชี้อีกไม่ควรรวบรวมหรืออย่างน้อยโยนเตือน อย่างไรก็ตามนี่คือผลลัพธ์ของฉัน (ทำบน Windows): gcc - ส่งคำเตือนตามที่คาดไว้ g ++ - โยนข้อผิดพลาดตามที่คาดไว้ (นี่เป็นเพราะการพิมพ์ที่อนุญาตน้อยกว่าของ C ++ ใช่ไหม?) MSVC (cl.exe) - ไม่มีการเตือนใด ๆ แม้จะมีการระบุ / Wall คำถามของฉันคือ: ฉันขาดอะไรบางอย่างเกี่ยวกับสิ่งทั้งปวงและมีเหตุผลเฉพาะที่ทำให้ MSVC ไม่สร้างคำเตือนหรือไม่? MSVC ไม่ผลิตเตือนเมื่อมีการแปลงจาก ไปvoid **float ** สิ่งที่ควรทราบอีกประการหนึ่ง: …
9 c++  c  cuda 

1
ป้องกันกระบวนการจากการเปิดไฟล์ descriptor ใหม่บน Linux แต่อนุญาตให้รับไฟล์ descriptor ผ่านซ็อกเก็ต
ขณะนี้ฉันกำลังทำงานในโครงการที่ฉันมีกระบวนการผู้ปกครองที่ตั้งค่า socketpair ส้อมและจากนั้นใช้ socketpair นี้เพื่อสื่อสาร เด็กถ้ามันต้องการที่จะเปิดไฟล์ (หรือทรัพยากรอื่น ๆ ที่ใช้อธิบายไฟล์อื่น ๆ ) ควรจะไปที่ผู้ปกครองขอทรัพยากรและได้รับการfdส่งผ่าน socketpair นอกจากนี้ฉันต้องการป้องกันเด็กจากการเปิดไฟล์ descriptor ใด ๆ ด้วยตัวเอง ฉันสะดุดsetrlimitซึ่งประสบความสำเร็จในการป้องกันเด็กจากการเปิดไฟล์ descriptors ใหม่ แต่ก็ดูเหมือนว่าจะทำให้โมเดอเรเตอร์ไฟล์ใด ๆ ที่ส่งผ่านการเชื่อมต่อซ็อกเก็ตเริ่มต้นใช้งานไม่ได้ มีวิธีการใด ๆ บน Linux ที่อนุญาตให้กระบวนการเดี่ยวเปิดไฟล์ใด ๆ ส่งไฟล์ descriptor ไปยังกระบวนการอื่นและอนุญาตให้ใช้โดยไม่อนุญาตให้กระบวนการอื่นเปิดไฟล์ descriptor ด้วยตัวเอง? สำหรับกรณีการใช้งานของฉันที่สามารถกำหนดค่าเคอร์เนลใด ๆ การเรียกของระบบและอื่น ๆ ตราบใดที่มันสามารถใช้หลังจาก fork และตราบใดที่มันใช้กับตัวอธิบายไฟล์ทั้งหมด (ไม่ใช่แค่ไฟล์ แต่ยังซ็อกเก็ตซ็อกเก็ตคู่ ฯลฯ )
9 c  linux  system-calls 

1
ตัวชี้ไปยังชนิดที่ไม่สมบูรณ์สามารถไม่สมบูรณ์ได้หรือไม่?
สามารถint (*)[]จะเป็นประเภทที่ไม่สมบูรณ์? C 2018 6.2.5 1 พูดว่า: ณ จุดต่าง ๆ ภายในหน่วยการแปลประเภทของวัตถุอาจไม่สมบูรณ์ (ขาดข้อมูลเพียงพอที่จะกำหนดขนาดของวัตถุประเภทนั้น) หรือสมบูรณ์ (มีข้อมูลเพียงพอ) ดังนั้นจึงดูเหมือนว่าถ้าขนาดของประเภทเป็นที่รู้จักประเภทจะเสร็จสมบูรณ์ 6.2.6.1 28 ระบุว่าพอยน์เตอร์บางประเภทต้องมีขนาดเท่ากัน (พอยน์เตอร์voidและตัวอักษร, พอยน์เตอร์ไปยังประเภทที่เข้ากันได้, พอยน์เตอร์ไปยังโครงสร้างและพอยน์เตอร์เป็นสหภาพ) แต่พอยน์เตอร์ ในการนำ C ไปใช้งานที่ตัวชี้ทั้งหมดหรือตัวชี้ทั้งหมดไปยังอาร์เรย์intมีขนาดเท่ากันแล้วขนาดint (*)[]เป็นที่รู้จักดังนั้นจึงจะสมบูรณ์ ในการใช้งานที่กล่าวว่าใช้ตัวชี้ที่แตกต่างกันสำหรับอาร์เรย์ขนาดใหญ่ขนาดจะไม่เป็นที่รู้จักดังนั้นจึงไม่สมบูรณ์ เมื่อMM ชี้ให้เห็นโครงสร้างจะต้องไม่มีสมาชิกที่มีชนิดไม่สมบูรณ์ยกเว้นสมาชิกอาร์เรย์สุดท้ายที่ยืดหยุ่นตามข้อ จำกัด ใน 6.7.2.1 3. สิ่งนี้ชี้ให้เห็นว่าการนำไปปฏิบัติที่มีพอยน์เตอร์ขนาดเดียวต้องยอมรับstruct { int (*p)[]; }ในขณะที่การนำไปใช้ที่แตกต่างกัน ขนาดสำหรับอาร์เรย์ดังกล่าวจะต้องวินิจฉัยการละเมิดข้อ จำกัด (นี่หมายความว่าคำประกาศดังกล่าวไม่ได้เป็นส่วนหนึ่งของการปฏิบัติตามค. อย่างเคร่งครัด)

3
เหตุใด LLVM จึงจัดสรรตัวแปรซ้ำซ้อน
นี่คือไฟล์ C อย่างง่ายที่มีนิยาม enum และmainฟังก์ชั่น: enum days {MON, TUE, WED, THU}; int main() { enum days d; d = WED; return 0; } มัน transpiles เพื่อ LLVM IR ต่อไปนี้: define dso_local i32 @main() #0 { %1 = alloca i32, align 4 %2 = alloca i32, align 4 store i32 0, …
9 c  llvm  llvm-codegen 

1
CHAR_WIDTH ไม่ได้ประกาศ
ฉันพบข้อผิดพลาด ‘CHAR_WIDTH’ undeclared เมื่อพยายามคอมไพล์โปรแกรมอย่างง่ายนี้: #include <stdio.h> #include <limits.h> int main() { printf("CHAR_BIT = %d\n", CHAR_BIT); printf("CHAR_WIDTH = %d\n", CHAR_WIDTH); return (0); } กับ gcc ./show_char_width.c -o show_char_width และ gcc: GNU C17 (Ubuntu 8.3.0-6ubuntu1) รุ่น 8.3.0 (x86_64-linux-gnu) รวบรวมโดย GNU C รุ่น 8.3.0, รุ่น GMP 6.1.2, MPFR เวอร์ชั่น 4.0.2, MPC เวอร์ชั่น 1.1.0 …
9 c  gcc 

1
“ คำสั่งฮาร์ดแวร์ที่ผิดกฎหมาย” จากรหัสที่ง่ายมาก
ในขณะที่ตรวจสอบการอ้างสิทธิ์ที่น่าสงสัยฉันได้เขียนโปรแกรมทดสอบเล็กน้อยนี้noway.c int proveit() { unsigned int n = 0; while (1) n++; return 0; } int main() { proveit(); return 0; } ทดสอบสิ่งนี้ฉันจะได้รับ: $ clang -O noway.c $ ./a.out zsh: illegal hardware instruction ./a.out วัด หากฉันรวบรวมโดยไม่มีการเพิ่มประสิทธิภาพมันแฮงค์ตามที่คาดไว้ ฉันดูที่ชุมนุมและไม่มีเสียงระฆังและเสียงนกหวีดmainฟังก์ชั่นที่มีลักษณะเช่นนี้: _main: ## @main pushq %rbp movq %rsp, %rbp ud2 ที่ud2เห็นได้ชัดคือคำสั่งที่เฉพาะเจาะจงสำหรับพฤติกรรมที่ไม่ได้กำหนด การเรียกร้องที่น่าสงสัยดังกล่าว "ฟังก์ชั่นที่ไม่เคยส่งคืนคือ UB" …

1
ทำไมโปรแกรมของฉันยังคงติดขัดในขณะที่รันโปรแกรม mandelbrot brainf ***
ฉันต้องการพัฒนาทักษะ C ของฉันดังนั้นฉันจึงค้นหาความคิดของโปรแกรมบางอย่าง มีคนเสนอให้สร้างล่าม Brainf *** ง่ายๆแล้วเป็นผู้แปล ดังนั้นที่นี่ฉัน ฉันสร้างล่ามและทำงานได้ตามที่คาดไว้ยกเว้นด้วยโปรแกรม Mandelbrot: A mandelbrot set fractal viewer in brainfuck written by Erik Bosman +++++++++++++[->++>>>+++++>++>+<<<<<<]>>>>>++++++>--->>>>>>>>>>+++++++++++++++[[ >>>>>>>>>]+[<<<<<<<<<]>>>>>>>>>-]+[>>>>>>>>[-]>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>[-]+ <<<<<<<+++++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>>>>+>>>>>>>>>>>>>>>>>>>>>>>>>> >+<<<<<<<<<<<<<<<<<[<<<<<<<<<]>>>[-]+[>>>>>>[>>>>>>>[-]>>]<<<<<<<<<[<<<<<<<<<]>> >>>>>[-]+<<<<<<++++[-[->>>>>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>>>+<<<<<<+++++++[-[->>> >>>>>>+<<<<<<<<<]>>>>>>>>>]>>>>>>+<<<<<<<<<<<<<<<<[<<<<<<<<<]>>>[[-]>>>>>>[>>>>> >>[-<<<<<<+>>>>>>]<<<<<<[->>>>>>+<<+<<<+<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>> [>>>>>>>>[-<<<<<<<+>>>>>>>]<<<<<<<[->>>>>>>+<<+<<<+<<]>>>>>>>>]<<<<<<<<<[<<<<<<< <<]>>>>>>>[-<<<<<<<+>>>>>>>]<<<<<<<[->>>>>>>+<<+<<<<<]>>>>>>>>>+++++++++++++++[[ >>>>>>>>>]+>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]>[-]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+[ >+>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>[-<<<<+>>>>]<<<<[->>>>+<<<<<[->>[ -<<+>>]<<[->>+>>+<<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>>>>>>>>>]<<<<<<< <<[>[->>>>>>>>>+<<<<<<<<<]<<<<<<<<<<]>[->>>>>>>>>+<<<<<<<<<]<+>>>>>>>>]<<<<<<<<< [>[-]<->>>>[-<<<<+>[<->-<<<<<<+>>>>>>]<[->+<]>>>>]<<<[->>>+<<<]<+<<<<<<<<<]>>>>> >>>>[>+>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>->>>>>[-<<<<<+>>>>>]<<<<<[->>>>>+ <<<<<<[->>>[-<<<+>>>]<<<[->>>+>+<<<<]+>>>>>>>>>]<<<<<<<<[<<<<<<<<<]]>>>>>>>>>[>> >>>>>>>]<<<<<<<<<[>>[->>>>>>>>>+<<<<<<<<<]<<<<<<<<<<<]>>[->>>>>>>>>+<<<<<<<<<]<< +>>>>>>>>]<<<<<<<<<[>[-]<->>>>[-<<<<+>[<->-<<<<<<+>>>>>>]<[->+<]>>>>]<<<[->>>+<< <]<+<<<<<<<<<]>>>>>>>>>[>>>>[-<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<+>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>]>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>+++++++++++++++[[>>>> >>>>>]<<<<<<<<<-<<<<<<<<<[<<<<<<<<<]>>>>>>>>>-]+>>>>>>>>>>>>>>>>>>>>>+<<<[<<<<<< <<<]>>>>>>>>>[>>>[-<<<->>>]+<<<[->>>->[-<<<<+>>>>]<<<<[->>>>+<<<<<<<<<<<<<[<<<<< <<<<]>>>>[-]+>>>>>[>>>>>>>>>]>+<]]+>>>>[-<<<<->>>>]+<<<<[->>>>-<[-<<<+>>>]<<<[-> >>+<<<<<<<<<<<<[<<<<<<<<<]>>>[-]+>>>>>>[>>>>>>>>>]>[-]+<]]+>[-<[>>>>>>>>>]<<<<<< <<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]<<<<<<<[->+>>>-<<<<]>>>>>>>>>+++++++++++++++++++ +++++++>>[-<<<<+>>>>]<<<<[->>>>+<<[-]<<]>>[<<<<<<<+<[-<+>>>>+<<[-]]>[-<<[->+>>>- <<<<]>>>]>>>>>>>>>>>>>[>>[-]>[-]>[-]>>>>>]<<<<<<<<<[<<<<<<<<<]>>>[-]>>>>>>[>>>>> [-<<<<+>>>>]<<<<[->>>>+<<<+<]>>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>[>>[-<<<<<<<< <+>>>>>>>>>]>>>>>>>]<<<<<<<<<[<<<<<<<<<]>>>>>>>>>+++++++++++++++[[>>>>>>>>>]+>[- …

2
การห่อหุ้มเวลาคอมไพล์ใน C คืออะไร?
เมื่อฉันค้นคว้าข้อดีของ C เหนือ C ++ ฉันเจอในย่อหน้านี้: วิธีมาตรฐานใน C เพื่อทำ encapsulation คือการส่งต่อประกาศโครงสร้างและอนุญาตการเข้าถึงข้อมูลผ่านฟังก์ชันเท่านั้น วิธีนี้ยังสร้างการห่อหุ้มเวลาการคอมไพล์ การคอมไพล์เวลาการคอมไพล์ช่วยให้เราสามารถเปลี่ยนสมาชิกโครงสร้างข้อมูลโดยไม่ต้องคอมไพล์รหัสไคลเอนต์ (รหัสอื่นโดยใช้อินเตอร์เฟสของเรา) วิธีมาตรฐานในการทำ encapsulation C ++ ในทางกลับกัน (การใช้คลาส) ต้องมีการคอมไพล์ใหม่ของรหัสลูกค้าเมื่อเพิ่มหรือลบตัวแปรสมาชิกส่วนตัว ฉันเข้าใจว่าการประกาศโครงสร้างและการเข้าถึงสมาชิกผ่านฟังก์ชั่นจะซ่อนรายละเอียดการใช้งานของโครงสร้างไว้อย่างไร สิ่งที่ฉันไม่เข้าใจคือบรรทัดนี้โดยเฉพาะ: คอมไพล์เวลา encapsulation ช่วยให้เราสามารถเปลี่ยนสมาชิกในโครงสร้างข้อมูลโดยไม่ต้อง recompilation รหัสลูกค้า (รหัสอื่น ๆ ที่ใช้อินเตอร์เฟซของเรา) สิ่งนี้เกี่ยวข้องกับสถานการณ์ใดบ้าง?
9 c 

6
ตัวชี้ C เพื่อประกาศอาร์เรย์ที่มีค่าบิตและผู้ประกอบการ
ฉันต้องการที่จะเข้าใจรหัสต่อไปนี้: //... #define _C 0x20 extern const char *_ctype_; //... __only_inline int iscntrl(int _c) { return (_c == -1 ? 0 : ((_ctype_ + 1)[(unsigned char)_c] & _C)); } มันมาจากไฟล์ctype.hจากรหัสที่มาระบบปฏิบัติการ obenbsd ฟังก์ชั่นนี้จะตรวจสอบว่าถ่านเป็นตัวควบคุมหรือตัวอักษรที่พิมพ์ได้ภายในช่วง ascii นี่คือห่วงโซ่ความคิดปัจจุบันของฉัน: iscntrl ('a') ถูกเรียกและ 'a' ถูกแปลงเป็นค่าจำนวนเต็ม ก่อนอื่นตรวจสอบว่า _c เป็น -1 แล้วส่งกลับ 0 อื่น ๆ เพิ่มที่อยู่ของพอยน์เตอร์ที่ไม่ได้กำหนดชี้ไปที่ 1 ประกาศที่อยู่นี้เป็นตัวชี้ไปยังอาร์เรย์ของความยาว …
9 c  openbsd 

3
foo (void) vs foo (void *)
ฟังก์ชั่นและการพูด syntactically มีความแตกต่างระหว่างฟังก์ชั่นที่มีต้นแบบint foo(void)และint foo(void *) ? ฉันรู้ว่าความแตกต่างระหว่างตัวอย่างเช่นint bar(int)และint bar(int *)- หนึ่งของพวกเขากำลังมองหา int และอื่น ๆ ที่กำลังมองหาตัวชี้ int มีvoidพฤติกรรมแบบเดียวกันหรือไม่?

3
+ (+ k--) นิพจน์ใน C
ฉันเห็นคำถามนี้ในการทดสอบที่เราต้องบอกผลลัพธ์ของรหัสต่อไปนี้ #include<stdio.h> int main(){ int k = 0; while(+(+k--)!=0) k=k++; printf("%d\n", k); return 0; } -1เอาท์พุทเป็น ฉันไม่แน่ใจว่าทำไมนี่คือคำตอบ การแสดงออก+(+k--)หมายถึงอะไรใน C?
9 c 

4
ขนาดของการทำงานกับ dereferencing ตัวชี้ไปยังอาร์เรย์นี้ได้อย่างไร
ที่นี่ฉันมีตัวชี้ptrไปยังอาร์เรย์arrของจำนวนเต็ม 4 ตัว ptrชี้ไปที่อาร์เรย์ทั้งหมด ptr[0]หรือ*ptrชี้ไปที่องค์ประกอบแรกของอาร์เรย์ดังนั้นการเพิ่ม 1 เพื่อptr[0]ให้ที่อยู่ขององค์ประกอบที่สองของอาร์เรย์ ฉันไม่เข้าใจว่าทำไมการใช้sizeof(ptr[0])ให้ขนาดของทั้งอาร์เรย์ 16 ไบต์ไม่ใช่ขนาดขององค์ประกอบแรกเท่านั้น 4 ไบต์ (ตามที่ptr[0]ชี้ไปที่องค์ประกอบแรกในอาร์เรย์) int arr[4] = {0, 1, 2, 3}; int (*ptr)[4] = &arr; printf("%zd", sizeof(ptr[0])); //output is 16
9 c  arrays  pointers 

1
การเริ่มต้นวัตถุใน Java“ Foo f = new Foo ()” เป็นหลักเหมือนกับการใช้ malloc สำหรับตัวชี้ใน C หรือไม่?
ฉันพยายามที่จะเข้าใจกระบวนการจริงของการสร้างวัตถุใน Java และฉันคิดว่าภาษาการเขียนโปรแกรมอื่น ๆ จะผิดไหมถ้าสมมติว่าการเริ่มต้นวัตถุใน Java นั้นเหมือนกับเมื่อคุณใช้ malloc สำหรับโครงสร้างใน C หรือไม่? ตัวอย่าง: Foo f = new Foo(10); typedef struct foo Foo; Foo *f = malloc(sizeof(Foo)); นี่คือสาเหตุที่วัตถุถูกกล่าวว่าอยู่บนกองมากกว่ากองซ้อนหรือไม่? เพราะพวกมันเป็นเพียงตัวชี้ไปยังข้อมูล?

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