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);

undefined.
void Read(char* fName, int *&a[], int &n);
Trả lời:

Đáp án đúng: D


Câu hỏi yêu cầu khai báo hàm đọc một text file vào một mảng các số nguyên. Ta cần phân tích các lựa chọn:

  • A. void Read(char* fName, int a[]);: Khai báo này có vẻ đúng, vì int a[] có thể được hiểu là một mảng các số nguyên. Tuy nhiên, trong C/C++, khi truyền một mảng vào hàm, nó sẽ bị suy biến thành con trỏ tới phần tử đầu tiên của mảng. Do đó, hàm không biết kích thước của mảng, và việc đọc dữ liệu vào mảng có thể gây ra lỗi tràn bộ nhớ nếu không được kiểm soát kích thước một cách cẩn thận ở phía trong hàm.
  • B. void Read(char* fName, int a);: Khai báo này sai, vì int a chỉ là một số nguyên, không phải là mảng.
  • C. void Read(char* fName, int *a);: Khai báo này tương tự như A, int *a là một con trỏ đến một số nguyên, và có thể được sử dụng để trỏ đến phần tử đầu tiên của một mảng các số nguyên. Tương tự như A, hàm không biết kích thước của mảng.
  • D. void Read(char* fName, int *&a, int &n);: Khai báo này đúng. int *&a là một tham chiếu đến một con trỏ đến một số nguyên. Điều này cho phép hàm thay đổi con trỏ a, ví dụ như cấp phát bộ nhớ cho mảng. int &n là một tham chiếu đến một số nguyên, cho phép hàm trả về kích thước của mảng sau khi đọc từ file. Như vậy, hàm có thể cấp phát bộ nhớ một cách linh hoạt và an toàn.
  • E. void Read(char* fName, int *&a[], int &n);: Khai báo này sai, vì int *&a[] là một tham chiếu đến một mảng các con trỏ số nguyên, không phải là mảng các số nguyên như yêu cầu đề bài.

Vậy, đáp án đúng nhất là D, vì nó cho phép hàm cấp phát bộ nhớ động cho mảng và trả về kích thước của mảng, đảm bảo tính an toàn và linh hoạt.

Câu hỏi liên quan