Trả về mảng từ hàm C ++

Return Array From Function C



Mảng là các vùng chứa cụ thể có các giá trị của cùng một kiểu dữ liệu. Các hàm trong C ++ thực hiện các phép toán trên mảng, và các mảng này sau đó được trả về hàm chính. Có nhiều cách tiếp cận để mô tả hiện tượng này. Trong hướng dẫn này, một số phương pháp phổ biến được giải thích:

Sử dụng con trỏ để trả về mảng tĩnh

Khi chúng ta sử dụng một mảng bình thường, có khả năng có một số loại kết quả bất thường. Để tránh điều này, chúng tôi sử dụng một mảng tĩnh trong mã C ++ của chúng tôi. Hãy để chúng tôi hiểu ví dụ mà chúng tôi đã sử dụng. Trong hàm này, chúng ta đã khai báo một mảng có 5 giá trị kiểu trả về như đã đề cập ở đây.







Hàm int * ()



Vì giá trị sẽ là một kiểu số nguyên, vì vậy nó được gắn thẻ là int trong ví dụ bên dưới. Như chúng ta đã giới thiệu hàm dưới dạng con trỏ, hàm sẽ là một kiểu con trỏ. Sau khi nhập các giá trị, một mảng được trả về chương trình chính.







Trong chương trình chính, chúng ta đã thực hiện một cuộc gọi hàm. Để chấp nhận giá trị được trả về từ hàm, chúng ta sẽ sử dụng một biến số nguyên. Khi mảng được trả về, chúng ta có thể truy cập các giá trị của nó một cách dễ dàng. Các giá trị sẽ được in thủ công.

NS*con trỏ=hàm số();

Mục đích của con trỏ là xác định vị trí mục hiện diện trên chỉ mục của một mảng. Nói cách khác, nó hiển thị địa chỉ của giá trị trong mảng. Sau đó, chúng tôi sử dụng một nguyên mẫu hàm sẽ trả về con trỏ.



Để xem kết quả đầu ra của mảng được trả về thông qua hàm, chúng ta cần có quyền truy cập vào thiết bị đầu cuối Ubuntu trong trường hợp Linux. Điều này là do đầu ra có thể truy cập thông qua thiết bị đầu cuối Linux. Trong Linux, chúng ta cần một trình biên dịch để chạy mã C ++ được viết trong bất kỳ trình soạn thảo văn bản nào. Quá trình biên dịch này được thực hiện thông qua G ++. -O được sử dụng để lưu trữ kết quả đầu ra trong một tệp. Ở đây, chúng ta cần tệp đầu ra và tệp mã nguồn. Sau khi biên dịch, chúng tôi sẽ thực thi đoạn mã:

$g ++ -hoặcfile1 file1.c
$./file1

Từ đầu ra, chúng ta có thể thấy mảng, được khởi tạo trong hàm, được hiển thị trong hàm chính bằng cách sử dụng một mảng tĩnh, được khởi tạo thủ công và thông qua các con trỏ.

Trả về mảng được phân bổ động bằng cách sử dụng con trỏ

Mảng có thể được trả về bằng cách sử dụng phân bổ động. Mảng có thể được cấp phát động bằng cách sử dụng từ mới. Chúng sẽ vẫn ở đó cho đến khi chúng tôi tự xóa chúng. Mảng tĩnh có kích thước cố định, có nghĩa là bạn phải cung cấp kích thước trong quá trình khởi tạo. Khi mảng được tạo, rất khó để tăng kích thước tại thời điểm chạy hoặc sau đó. Nhưng trong trường hợp của mảng động, chúng ta có thể thêm nhiều mục hơn bất cứ khi nào chúng ta muốn vì nó mở rộng khi chúng ta nhập các giá trị vào đó. Vì vậy, chúng tôi không cần chỉ định hoặc xác định bất kỳ kích thước nào.

Tiến tới ví dụ mà chúng tôi đã sử dụng ở đây. Chúng ta đã sử dụng một mảng động với các con trỏ như trong các ví dụ trước, trong đó chúng ta đã sử dụng các con trỏ với các mảng tĩnh.

NS*hàm số()

Sau khi khai báo hàm, các mảng được khai báo động:

NS*mảng= Mới NS [100];

Thuật ngữ, mới, thường xuyên được sử dụng để tạo một mảng động. Chúng ta sẽ thực hiện các phép toán trên mảng bằng cách nhập các giá trị vào đó. Sau đó, mảng được quay trở lại chương trình chính:

Bây giờ, hãy xem xét chức năng chính. Chúng tôi đã thực hiện cuộc gọi hàm. Khi mảng được trả về, chúng tôi thêm một biến kiểu số nguyên con trỏ để chấp nhận giá trị.

NS*con trỏ=hàm số();

Các giá trị đã được lưu trữ trong mảng được in theo cách thủ công. Đầu ra thu được thông qua phương pháp biên dịch và thực thi.

Trả về mảng bằng cách sử dụng cấu trúc

Các cấu trúc là các vùng chứa giống như các mảng. Nhưng mảng chứa giá trị của cùng một kiểu dữ liệu tại một thời điểm. Và trong trường hợp cấu trúc, chúng chứa nhiều hơn một giá trị kiểu dữ liệu. Chúng tôi đã lấy một cấu trúc có tên là mẫu. Ở đây, khai báo mảng nằm bên trong các cấu trúc thay vì các hàm. Kiểu trả về là tên của cấu trúc. Biến cấu trúc được trả về chương trình chính. Cấu trúc sử dụng từ struct để khai báo.

Cấu trúc mẫu
{
Int arr[100];
};

Sau khi khai báo cấu trúc, chúng ta đã sử dụng một hàm trong đó một đối tượng cấu trúc được tạo. Đối tượng này sẽ được sử dụng để truy cập cấu trúc. Hàm này sẽ trả đối tượng của cấu trúc về hàm main để chúng ta có thể in mảng thông qua đối tượng này. Một biến sẽ nhận các giá trị trong biến. Giá trị này là số nguyên mà chúng ta sẽ nhập các giá trị vào mảng. Như trong ví dụ này, chúng tôi đã chọn 6 làm số. Vì vậy, các số sẽ được nhập lên đến 6 trong mảng.

Cấu trúc func mẫu(NSn)

Bây giờ, chuyển sang chương trình chính, chúng ta đã tạo một đối tượng để truy cập vào mảng thông qua điều này:

Cấu trúc mẫu x;

Sau khi khởi tạo đối tượng, một giá trị được thêm vào biến mà chúng ta muốn các số được nhập vào mảng. Trong một lời gọi hàm, chúng ta sẽ chuyển giá trị vào tham số:

NS=hàm số(n);

Chúng ta sẽ có màn hình hiển thị bằng cách sử dụng vòng lặp for. Các giá trị được hiển thị thông qua đối tượng được khai báo khi bắt đầu chương trình chính:

Đầu ra chỉ ra rằng 6 giá trị được hiển thị trong kết quả vì chúng ta đã nhập 6 số vào chương trình.

Trả về mảng bằng cách sử dụng Std

C ++ sử dụng nhiều phương thức để trả về một mảng từ hàm. Một trong số đó là thông qua std :: array. Nó là một khuôn mẫu của cấu trúc. Tính năng này còn cung cấp thêm hai hàm nữa là size () và blank (). Tên mảng được trả về cho biết rằng toàn bộ mảng được trả về chương trình chính. Ở đây, chúng tôi sẽ thêm một mảng tệp tiêu đề. Ngoài thư viện, nó chứa tất cả các chức năng của mảng.

#bao gồm

mảng<NS,10>hàm số()

Vì chúng ta có thể trả về toàn bộ mảng với tên của nó, vì vậy trong khai báo một hàm, chúng ta sẽ sử dụng mảng như một kiểu trả về. Dữ liệu được nhập vào mảng. Sau đó, mảng sẽ được đưa trở lại chương trình chính. Về phía hàm chính, một biến mảng sẽ chấp nhận mảng khi hàm được gọi.

arr=hàm số();

Một lần nữa, vòng lặp for sẽ được sử dụng để hiển thị các giá trị mảng. Chúng ta quan sát kết quả đầu ra từ hình ảnh hiển thị bên dưới. Vì chúng tôi đã sử dụng 10 kích thước, 0 số sẽ được nhập. Do đó, chúng được hiển thị:

Trả về mảng thông qua vùng chứa vector

Cách tiếp cận này là một mảng được cấp phát động. Như trong trường hợp này, không cần chỉ định kích thước mảng. Chúng tôi không cần bất kỳ thông số kích thước nào ở đây. Sử dụng ví dụ này, chúng ta cần thêm tiêu đề vectơ trong thư viện chứa các chức năng của vectơ.

Di chuyển về phía hàm, trong đó kiểu trả về cũng là một vectơ int và cũng chứa một con trỏ vectơ làm đối số trong tham số. Một mảng với tên tạm thời được giới thiệu ở đây:

Véc tơ<NS>MultiplyArrayByTwo(hăng sôvectơ<NS> *arr)

Hàm sẽ nhân hai phần tử của mảng bằng cách sử dụng hàm tmp.push_back (). Sau đó, trả lại tmp. Một biến kiểu tự động sẽ chấp nhận các giá trị của mảng từ hàm. Mảng chứa các mục trong đó.

Đầu ra cho thấy hoạt động của vùng chứa vector.

Phần kết luận

Trong bài viết nói trên, chúng tôi đã mô tả năm phương thức được sử dụng phổ biến nhất để giải thích chức năng trả về một mảng từ hàm.