mọi người cho mình hỏi làm thế nào để trả về array trong 1 function nhỉ mình cảm ơn
Return array in function c++
Trả về cái pointer là được.
Array gồm pointer và size, trả về sẽ khó hơn là trả về pointer không.
Tốt nhất là tận dùng kiểu dữ liệu std::vector
Nếu muốn dùng array thì 1 là cấp phát động:
#include <iostream>
#include <cstdlib>
int* someCal(int n)
{
int* wantData = new int[n];
wantData[1] = 1;
return wantData;
}
int main()
{
int* data = someCal(3);
std::cout << data[1] << std::endl;
delete[] data;
}
2 là xài hàm trung gian:
#include <iostream>
#include <cstdlib>
bool someCal(int outputData[])
{
outputData[1] = 1;
return true;
}
int main()
{
int* wantData = new int[3];
wantData[1] = 0;
someCal(wantData);
std::cout << wantData[1] << std::endl;
}
3 là smart pointer
#include <iostream>
#include <cstdlib>
#include <memory>
std::shared_ptr<int[]> someCal(int n)
{
auto wantData = std::make_shared<int[]>(n);
wantData[1] = 1;
return wantData;
}
int main()
{
auto data = someCal(3);
std::cout << data[1] << std::endl;
}
-
Nếu số lượng phần tử trả về biết trước, hay lúc nào cũng là 1 số lượng cố định thì xài
std::array
#include <array> std::array<int, 4> return4Integers() { std::array<int, 4> result; // làm gì đó với mảng 4 phần tử này return result; }
-
Nếu số lượng phần tử trả về ko rõ, ví dụ có thể trả về từ 10-1000 phần tử, hay ví dụ trả về mảng các số nguyên tố bé hơn 1000, thì xài
std::vector
#include <vector> std::vector<int> returnNIntegers(int n) { std::vector<int> result(n); // mảng n số nguyên // làm gì đó với mảng này return result; } std::vector<int> primesLessThan(int n) { std::vector<int> result; for (int i = 2; i < n; ++i) if (isPrime(i)) result.push_back(i); return result; }
Về cơ bản, chúng ta không thể return được array.
Thế nên cách để lấy một array như một kiểu trả về từ hàm thì có thể return về 1 con trỏ trỏ tới phần từ đầu tiên trong array đó.
để array vào 1 struct là return nó được thôi à, ko có gì bí hiểm @_@ Ông C bị khùng nên tự decay array thành con trỏ. Theo ý của mình ko truyền mảng như biến bình thường được vì nó tự động biến thành con trỏ là design cực kì hạn hẹp của C.
https://stackoverflow.com/a/38857777/ do lý do lịch sử, thừa kế từ B nên mới ra cái array decay dở dở ương ương này… Trong B mảng được implement nhờ 1 con trỏ, nên C cũng implement array như vậy. Sau đó struct
được thêm vào C sau array, mảng trong struct ko cần con trỏ này nữa mà chứa được mảng thật luôn. Từ đó array cũng ko cần con trỏ như B nữa, nhưng để backward compatibility thì array vẫn bị decay thành con trỏ để thỏa mãn cụ B…
C++ vẫn còn mấy cái hàm của C thây :gach:
ai biểu đòi backward compatibility với C