Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

MCQ ในการจัดสรรหน่วยความจำและกระบวนการคอมไพล์ใน C


เราจะพบคำถามเกี่ยวกับ MCQ เกี่ยวกับการจัดสรรหน่วยความจำและกระบวนการรวบรวม

คำถามที่ 1 − ผลลัพธ์ของรหัสต่อไปนี้จะเป็นอย่างไร -

#include <stdio.h>
#include <stdlib.h>
int main() {
   union my_union {
      int i;
      float f;
      char c;
   };
   union my_union* u;
   u = (union my_union*)malloc(sizeof(union my_union));
   u->f = 20.60f;
   printf("%f", u->f);
}

ตัวเลือก

  • มูลค่าขยะ
  • 20.6000000
  • ข้อผิดพลาดทางไวยากรณ์
  • 20.6

คำอธิบาย

เมื่อใช้สหภาพแรงงาน เราสามารถใช้ตำแหน่งหน่วยความจำเดียวกันเพื่อเก็บข้อมูลหลายประเภท สมาชิกสหภาพแรงงานทุกคนใช้ตำแหน่งหน่วยความจำเดียวกันซึ่งมีพื้นที่ว่างสูงสุด ที่นี่ใช้ทุ่นซึ่งมี 20.60f =20.600000 ดังนั้นคำตอบ B ถูกต้อง

คำถามที่ 2 − ลำดับที่ถูกต้องของกระบวนการรวบรวมคืออะไร -

ตัวเลือก

  • แอสเซมเบลอร์ คอมไพเลอร์ พรีโปรเซสเซอร์ ลิงก์
  • คอมไพเลอร์, แอสเซมเบลอร์, พรีโปรเซสเซอร์, ลิงค์
  • ตัวประมวลผลล่วงหน้า คอมไพเลอร์ แอสเซมเบลอร์ ลิงก์
  • แอสเซมเบลอร์ คอมไพเลอร์ ลิงก์ พรีโปรเซสเซอร์

คำอธิบาย

ตัวเลือก C ถูกต้อง ในตอนแรกจะประมวลผลโค้ดล่วงหน้า จากนั้นคอมไพล์ จากนั้นจะสร้างโค้ดระดับแอสเซมบลี หรือโค้ดอ็อบเจ็กต์ จากนั้นจึงทำการเชื่อมโยง

คำถามที่ 3 − ข้อความใดต่อไปนี้เป็นความจริง

ตัวเลือก

  • ระหว่างการเชื่อมโยงโค้ด #include จะแทนที่ด้วย stdio.h
  • ระหว่างการประมวลผลโค้ดล่วงหน้า #include จะแทนที่ด้วย stdio.h
  • ระหว่างดำเนินการ รหัส #include จะแทนที่ด้วย stdio.h
  • ระหว่างการแก้ไขโค้ด #include จะแทนที่ด้วย stdio.h

คำอธิบาย

ตัวเลือก B ถูกต้อง ในขั้นแรก มันจะสร้างโค้ดที่ประมวลผลไว้ล่วงหน้า ในขั้นตอนนั้นจะแนบรหัสที่มีอยู่ในไฟล์ที่กล่าวถึงในคำสั่ง #include ลงในโค้ดแล้วส่งไปยังคอมไพเลอร์

คำถามที่ 4 − วัตถุประสงค์ของการใช้ฟังก์ชัน fflush() −

ตัวเลือก

  • เพื่อล้างสตรีมทั้งหมดและสตรีมที่ระบุ
  • เพื่อล้างเฉพาะสตรีมที่ระบุ
  • การล้างบัฟเฟอร์อินพุต-เอาต์พุต
  • นี่เป็นฟังก์ชันไลบรารีที่ไม่ถูกต้อง

คำอธิบาย

ฟังก์ชันนี้ใช้เพื่อล้างสตรีมเอาต์พุตเท่านั้น มันล้างบัฟเฟอร์เอาต์พุตและส่งออกไปยังคอนโซล ตัวเลือก A ถูกต้อง

คำถามที่ 5 − ชี้ให้เห็นข้อผิดพลาดของรหัสต่อไปนี้ −

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
   char* ptr;
   *ptr = (int*)malloc(30);
   strcpy(ptr, "ABC");
   printf("%s", ptr);
   free(ptr);
}

ตัวเลือก

  • เกิดข้อผิดพลาดในคำสั่ง strcpy()
  • ข้อผิดพลาดใน *ptr =(int*)malloc(30);
  • เกิดข้อผิดพลาดใน free(ptr)
  • ไม่มีข้อผิดพลาด

คำอธิบาย

ตัวเลือก B ถูกต้อง นี่จะทำให้จำนวนเต็มจากตัวชี้โดยไม่ต้องโยน