может ли функция возвращать более одного значения? [Дубликат]

В Java, когда оператор «==» используется для сравнения двух объектов, он проверяет, ссылаются ли объекты на одно и то же место в памяти. Другими словами, он проверяет, являются ли имена двух объектов в основном ссылками на одно и то же место в памяти.

Класс Java String фактически переопределяет реализацию equals () по умолчанию в классе Object и переопределяет этот метод, чтобы он проверял только значения строк, а не их местоположения в памяти. Это означает, что если вы вызываете метод equals () для сравнения двух объектов String, то, пока действительная последовательность символов равна, оба объекта считаются равными.

Оператор == проверяет, являются ли две строки точно одним и тем же объектом.

Метод .equals() проверяет, имеют ли две строки одно и то же значение.

13
задан Community 23 May 2017 в 10:31
поделиться

7 ответов

Нет, но вы можете вернуть пару или boost :: tuple , которые могут содержать несколько значений.

Кроме того, вы можете использовать ссылки для возврата нескольких значений, например:

void MyFunction(int a, int b, int& sum, int& difference);

Вы бы вызывали эту функцию так:

int result_sum;
int result_difference;
MyFunction(1, 2, result_sum, result_difference);

Как указывает Хоган, технически это не , возвращающее несколько переменных , однако это хорошая замена.

12
ответ дан 1 December 2019 в 17:47
поделиться

Да - ваша функция должна возвращать структуру. Или верните значения через ссылочные параметры.

struct A {
   int x, y;
   A(int x, int y) : x(x), y(y) {}
};

A myfun() {
   return A(0, 42);    // return  two values
}

или:

void myfun(int & a, int & b) {
   a = 0;
   b = 42;
}
15
ответ дан 1 December 2019 в 17:47
поделиться

Функция может возвращать значения указанными способами:

  • Через возвращаемое значение любого типа
  • Через указатель
  • Через ссылку
  • Через установка глобальной переменной (настоятельно не рекомендуется)

Если вам нужно автономное возвращаемое значение, вы обычно должны заключить нужные типы в структуру и вернуть объект этой структуры по значению. Если вы хотите избежать сохранения локальной копии, вы должны передать параметр ссылки для изменения.

1
ответ дан 1 December 2019 в 17:47
поделиться

В усилении : : tuple , есть функция tie , которая упрощает процесс получения информации из возвращенного кортежа . Если у вас есть функция, возвращающая кортеж из двух double s, и вы хотите загрузить их в две локальные переменные x и y , вы можете присвоить возвращаемое значение вашей функции boost :: tie (x, y) .

Пример:

#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;
}
22
ответ дан 1 December 2019 в 17:47
поделиться
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);
}

здесь будет возвращен адрес c1. поэтому он будет храниться в основном c cariable. мы можем получить обе переменные через указатель,

-4
ответ дан 1 December 2019 в 17:47
поделиться

использовать структуру и возвращать несколько значений с разными типами данных.

0
ответ дан 1 December 2019 в 17:47
поделиться
#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);
}
1
ответ дан 1 December 2019 в 17:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: