Cách Truyền Một Mảng Cho Một Hàm

Mục lục:

Cách Truyền Một Mảng Cho Một Hàm
Cách Truyền Một Mảng Cho Một Hàm
Anonim

Mảng là một trong những hình thức lưu trữ dữ liệu có cấu trúc được sử dụng nhiều nhất trong các chương trình máy tính. Quá trình xử lý của chúng có thể được thực hiện bằng các thuật toán khác nhau được thực hiện trong các phương thức và hàm của lớp. Do đó, nó thường được yêu cầu truyền một mảng cho một hàm. Các ngôn ngữ C và C ++ mang lại sự tự do tuyệt vời trong việc lựa chọn các phương pháp thực hiện hành động này.

Cách truyền một mảng cho một hàm
Cách truyền một mảng cho một hàm

Nó là cần thiết

trình biên dịch ngôn ngữ C và C ++

Hướng dẫn

Bước 1

Truyền một mảng có kích thước cố định vào hàm. Thay đổi nguyên mẫu của hàm để chứa đối số có kiểu thích hợp. Ví dụ: khai báo một hàm nhận một mảng các giá trị số nguyên của ba phần tử làm tham số có thể giống như sau:

void ArrayFunction (int aNumbers [3]);

Một hàm như vậy được gọi bằng cách truyền trực tiếp một mảng tới nó như một đối số:

void SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers);

}

Dữ liệu đã chuyển được sao chép vào ngăn xếp. Việc sửa đổi mảng trong hàm được gọi không thay đổi nguồn.

Bước 2

Truyền các mảng có độ dài thay đổi cho hàm. Để thực hiện việc này, chỉ cần không chỉ định thứ nguyên của đối số tương ứng:

void ArrayFunction (int aNumbers );

Mảng nhiều chiều cũng có thể được truyền theo cách tương tự (chỉ "thứ nguyên" đầu tiên mới có thể là biến):

void ArrayFunction (int aNumbers [3] [2]);

Các hàm này được gọi theo cách tương tự như trong bước đầu tiên.

Để có thể xử lý chính xác các mảng có độ dài thay đổi trong một hàm, bạn phải chuyển rõ ràng số phần tử của chúng thông qua một tham số bổ sung hoặc sử dụng các quy ước áp đặt các hạn chế đối với giá trị của chính các phần tử đó (một giá trị nhất định phải là dấu cuối mảng).

Bước 3

Truyền mảng theo con trỏ. Đối số của hàm phải là một con trỏ đến một giá trị có kiểu tương ứng với các phần tử của mảng. Ví dụ:

void ArrayFunction (int * pNumbers);

Quyền truy cập vào dữ liệu trong một hàm có thể được thực hiện cả trong ký hiệu để làm việc với các phần tử mảng và sử dụng số học địa chỉ:

void ArrayFunction (int * pNumbers)

{

pNumbers [0] = 10; // truy cập vào phần tử 0

* (pNumbers + 1) = 20; // truy cập vào mục 1

}

Hãy cẩn thận! Vì hàm được truyền không phải là một bản sao của dữ liệu mà là một con trỏ tới nó, nên mảng ban đầu sẽ được sửa đổi.

Ưu điểm của phương pháp này là tốc độ, tiết kiệm tài nguyên tính toán và tính linh hoạt nhất định. Vì vậy, bạn có thể gọi hàm đích bằng cách chuyển nó một con trỏ tới một phần tử tùy ý của mảng:

void SomeFunction ()

{

int aNumbers = {1, 2, 3};

ArrayFunction (aNumbers); // toàn bộ mảng

ArrayFunction (& aNumbers [1]); // bắt đầu từ phần tử thứ hai

}

Phương thức này cũng thường liên quan đến việc chuyển số lượng phần tử có sẵn trong một tham số bổ sung hoặc sử dụng dấu chấm cuối mảng.

Bước 4

Truyền dữ liệu cho một hàm với một tham số là một đối tượng hoặc một tham chiếu đến một đối tượng của lớp thực thi chức năng mảng. Các lớp hoặc mẫu lớp như vậy thường được tìm thấy trong các thư viện và khuôn khổ phổ biến (QVector trong Qt, CArray trong MFC, std:: vector trong STL, v.v.).

Thường thì các lớp này thực hiện chiến lược chia sẻ dữ liệu ngầm với việc đếm tham chiếu, chỉ thực hiện sao chép sâu khi dữ liệu được sửa đổi (sao chép khi ghi). Điều này cho phép bạn giảm thiểu việc tiêu thụ tài nguyên tính toán ngay cả trong trường hợp truyền các đối tượng mảng theo giá trị thông qua các đối số của các hàm và phương thức:

void ArrayFunction (QVector oArray)

{

int nItemCount = oArray.count ();

int nItem = oArray [0];

}

void SomeFunction ()

{

QVector oArray (10);

for (int i = 0; i

Đề xuất: