thể trùng lặp:
Returning multiple values from a C++ functionmột hàm có thể trả về nhiều hơn một giá trị không?
thể một hàm trả về nhiều hơn một giá trị?
Sửa
Trừ trở lại bằng cách tham khảo.
thể trùng lặp:
Returning multiple values from a C++ functionmột hàm có thể trả về nhiều hơn một giá trị không?
thể một hàm trả về nhiều hơn một giá trị?
Sửa
Trừ trở lại bằng cách tham khảo.
Không, nhưng bạn có thể trả về một pair
hoặc boost::tuple
có thể chứa nhiều giá trị.
Bên cạnh đó, bạn có thể sử dụng tài liệu tham khảo để trả lại nhiều giá trị như thế này:
void MyFunction(int a, int b, int& sum, int& difference);
Bạn sẽ gọi hàm này như sau:
int result_sum;
int result_difference;
MyFunction(1, 2, result_sum, result_difference);
Như Hogan chỉ ra, kỹ thuật này không phải là trả lại nhiều biến, tuy nhiên nó là một thay thế tốt.
Chọn Nit: "Ngoài ra, bạn có thể trả lại nhiều giá trị như sau:" phải là "Ngoài ra, bạn có thể sửa đổi nhiều giá trị như thế này:". Bạn cũng có thể sửa đổi các biến phạm vi toàn cầu. – Hogan
Có - để chức năng của bạn trả về cấu trúc. Hoặc trả về các giá trị thông qua tham số tham chiếu.
struct A {
int x, y;
A(int a, int y) : x(x), y(y) {}
};
A myfun() {
return A(0, 42); // return two values
}
hay:
void myfun(int & a, int & b) {
a = 0;
b = 42;
}
Mặc dù về mặt kỹ thuật, đó vẫn là một giá trị trong C –
Câu trả lời có được trả lời cho câu hỏi hay không: "Chức năng có thể sửa đổi nhiều giá trị không?" Nó cũng có thể sửa đổi globals nếu bạn muốn được hoàn thành. – Hogan
nhưng vẫn chỉ có một giá trị (địa chỉ của nó) đã được gửi và chúng tôi có thể truy cập toàn bộ đối tượng bằng cách sao chép nó vào đối tượng khác. tôi muốn biết cụ thể liệu chúng tôi có thể gán hai giá trị cùng một lúc hay không. –
Một chức năng có thể trở lại giá trị trong cách quy định:
Nếu bạn cần giá trị trả lại tự chứa, bạn thường sẽ bao bọc các loại bạn cần trong cấu trúc và trả về một đối tượng của cấu trúc đó theo giá trị. Nếu bạn muốn tránh việc giữ một bản sao cục bộ, bạn sẽ chuyển vào một tham số tham chiếu cần sửa đổi.
Trong thư viện boost::tuple
, có a function called tie
giúp đơn giản hóa quá trình nhận thông tin từ một trả lại tuple
. Nếu bạn có hàm trả về một tuple
của hai số double
và muốn tải những biến đó thành hai biến cục bộ x
và y
, bạn có thể chỉ định giá trị trả về của hàm cho boost::tie(x, y)
.
Ví dụ:
#include <math.h>
#include <iostream>
#include <boost/tuple/tuple.hpp>
const double PI = 3.14159265;
boost::tuple<double, double> polar_to_rectangular(double radius, double angle)
{
return boost::make_tuple(radius * cos(angle), radius * sin(angle));
}
int main()
{
double x;
double y;
boost::tie(x, y) = polar_to_rectangular(4, (45 * PI)/180);
std::cout << "x == " << x << ", y == " << y << std::endl;
return 0;
}
tuyệt vời, không biết rằng –
main()
{
int a=10,b=20;
int *c;
c=aa(a,b);
printf("%d %d",*c,*c+1);
}
void aa(int a,int b)
{
int c1[2];
c1[0]=b+a;
c1[1]=a-b;
return(c1);
}
đây, địa chỉ của c1 sẽ trở lại. vì vậy nó sẽ lưu trữ trong c chính có thể.chúng tôi có thể thử cả hai biến thông qua con trỏ,
Dẫn đến hành vi không xác định. Thời gian của 'c1' kết thúc khi' aa' bị bỏ lại, vì vậy 'c' được trỏ sang trái tại một đối tượng đã chết. Truy cập nó dẫn đến hành vi không xác định. – GManNickG
hành vi không xác định. –
sử dụng cấu trúc và trả về nhiều giá trị với loại dữ liệu khác nhau.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
int a;
int b;
}Mystruct;
Mystruct myfun();
int main()
{
char name[30];
Mystruct ms2;
ms2 = myfun();
printf("val1: %d val2: %d",ms2.a,ms2.b);
return 0;
}
Mystruct myfun()
{
int a,b;
Mystruct ms;
a = 10;
b = 20;
ms.a=a;
ms.b=b;
return(ms);
}
Ngôn ngữ thuyết bất khả tri hoặc C++? –
Trong trường hợp bạn muốn có tổng quan về ngôn ngữ bất khả tri, đây là câu hỏi: http://stackoverflow.com/questions/1468375/how-do-you-return-two-values-from-a-single-method –
Bạn có thể trả lại dưới dạng mảng hoặc bạn có thể chuyển mảng dưới dạng tham chiếu và lưu trữ các giá trị này vào mảng đó. – pocoa