JavaScript is required

Khai báo hàm đọc một text file vào một mảng các số nguyên, hãy chọn khai báo đúng

A.

void Read( char* fName, int a[]);

B.

void Read(char* fName, int a);

C.

void Read(char* fName, int *a);

D.

void Read(char* fName, int *&a, int &n);

Trả lời:

Đáp án đúng: D


Để đọc một text file vào một mảng các số nguyên, hàm cần:

  1. Tên file (char* fName): Để biết file nào cần đọc.
  2. Địa chỉ của mảng (int *a hoặc int a[]): Để lưu trữ các số nguyên đọc được từ file. Cần truyền địa chỉ của mảng vì hàm cần thay đổi nội dung của mảng.
  3. Số lượng phần tử của mảng (nếu cần).

Phân tích các đáp án:

  • A. void Read( char* fName, int a[]);: Cách khai báo này đúng vì int a[] tương đương với int* a, tức là một con trỏ tới phần tử đầu tiên của mảng. Đây là một cách khai báo hợp lệ để truyền một mảng vào hàm.
  • B. void Read(char* fName, int a);: Sai. int a chỉ là một số nguyên, không phải là mảng. Hàm không thể lưu trữ nhiều số nguyên vào một biến đơn lẻ.
  • C. void Read(char* fName, int *a);: Đúng. int *a là một con trỏ tới một vùng nhớ chứa các số nguyên, tức là mảng. Tuy nhiên, phương án A đầy đủ hơn khi chỉ rõ là một mảng. Trong C/C++, hai cách khai báo này tương đương nhau khi sử dụng trong tham số hàm.
  • D. void Read(char* fName, int *&a, int &n);: Đúng. int *&a là một tham chiếu đến một con trỏ kiểu int. Cách này cho phép hàm thay đổi con trỏ a (ví dụ, cấp phát bộ nhớ mới cho mảng). int &n là một tham chiếu đến số lượng phần tử của mảng, cho phép hàm thay đổi kích thước mảng nếu cần. Mặc dù đúng, nhưng phức tạp hơn so với phương án A và C, và không thực sự cần thiết nếu mảng đã được cấp phát trước khi gọi hàm.

Kết luận:

Đáp án A và C đều đúng. Tuy nhiên đáp án A tường minh hơn khi thể hiện rõ việc truyền vào một mảng.

Câu hỏi liên quan