Что произойдет, если функция попытается вернуть более одного значения за раз?

Опубликовано: 7 Октября, 2022

Предварительное условие: как вернуть несколько значений из функции на C или C++?

Часто бывают случаи использования операторов return при работе с вызовами функций. Как правило, возвращается только одна вещь, будь то примитивный тип данных, такой как целое число, символ и т. д., или непримитивный тип данных, такой как массив, строка, вектор и т. д., в зависимости от типа возвращаемого значения функции.
Но что произойдет, если мы попытаемся вернуть более одного значения с помощью операторов return?

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

Предсказать результат:

C++




// C++ program to implement
// the above approach
#include <iostream>
using namespace std;
 
// Function declaration and
// definition
int AddSub(int c, int d)
{
    int x, y;
    x = c - d;
    y = c + d;
 
    // Returning two integers
    // instead of one
    return (x, y);
}
 
// Driver code
int main()
{
    // Initializing the variables
    int i = 100, j = 200, k;
 
    // Calling AddSub function
    k = AddSub(j, i);
 
    // Printing k
    cout << "The value of k = " << k;
}

C




// C program to implement
// the above approach
#include <stdio.h>
 
// Function declaration and
// definition
int AddSub(int c, int d)
{
    int x, y;
    x = c - d;
    y = c + d;
 
    // Returning two integers
    // instead of one
    return (x, y);
}
 
// Driver code
int main()
{
    // Initializing the variables
    int i = 100, j = 200, k;
 
    // Calling AddSub function
    k = AddSub(j, i);
 
    // Printing k
    printf("The value of k = %d", k);
}

Java




// Java program to implement
// the above approach
 
import java.util.*;
 
class GFG{
 
// Function declaration and
// definition
static int[] AddSub(int c, int d)
{
    int x, y;
    x = c - d;
    y = c + d;
 
    // Returning two integers
    // instead of one
    return new int[]{x, y};
}
 
// Driver code
public static void main(String[] args)
{
    // Initializing the variables
    int i = 100, j = 200;
    int []k;
 
    // Calling AddSub function
    k = AddSub(j, i);
 
    // Printing k
    System.out.print("The value of k = " +  (k[k.length-1]));
}
}
// This code is contributed by 29AjayKumar

Python3




# Python program to implement
# the above approach
 
# Function declaration and
# definition
def AddSub(c, d):
    x, y = 0, 0;
    x = c - d;
    y = c + d;
 
    # Returning two integers
    # instead of one
    return [x, y];
 
# Driver code
if __name__ == "__main__":
   
    # Initializing the variables
    i = 100; j = 200;
    k = 0;
 
    # Calling AddSub function
    k = AddSub(j, i);
 
    # Printing k
    print("The value of k = ", (k[len(k) - 1]));
     
# This code is contributed by 29AjayKumar

C#




// C# program to implement
// the above approach
using System;
 
public class GFG{
 
// Function declaration and
// definition
static int[] AddSub(int c, int d)
{
    int x, y;
    x = c - d;
    y = c + d;
 
    // Returning two integers
    // instead of one
    return new int[]{x, y};
}
 
// Driver code
public static void Main(String[] args)
{
    // Initializing the variables
    int i = 100, j = 200;
    int []k;
 
    // Calling AddSub function
    k = AddSub(j, i);
 
    // Printing k
    Console.Write("The value of k = " +  (k[k.Length-1]));
}
}
  
// This code is contributed by shikhasingrajput

Javascript




<script>
// javascript program to implement
// the above approach// Function declaration and
// definition
function AddSub(c , d)
{
    var x, y;
    x = c - d;
    y = c + d;
 
    // Returning two integers
    // instead of one
    return [x, y];
}
 
// Driver code
 
// Initializing the variables
var i = 100, j = 200;
var k;
 
// Calling AddSub function
k = AddSub(j, i);
 
// Printing k
document.write("The value of k = " +  (k[k.length-1]));
 
// This code is contributed by shikhasingrajput
</script>

Выход:

The value of k = 300

Временная сложность: O(1)
Вспомогательное пространство: O(1)

Объяснение:
Большинству из вас должно быть интересно, что вывод приведенного выше кода будет «Ошибкой», потому что в приведенном выше коде вызову функции возвращается больше разрешенных значений.
В таких случаях, когда несколько значений возвращаются без особых мер предосторожности, таких как массив, указатели, структуры, ссылки, кортежи, классы и объекты, тогда в этом случае возвращается последнее значение , а все значения до этого просто игнорируются.
Количество возвращаемых значений может быть много, но будет возвращено только последнее вхождение, а также можно игнорировать скобки или фигурные скобки «()» и можно писать без фигурных скобок, просто разделяя несколько значений запятой, как показано в приведенном ниже коде. :

Выход:

The value of k = 0

Временная сложность: O(1)
Вспомогательное пространство: O(1)

Объяснение:
Здесь выход равен 0, потому что последняя переменная t равна c % d = 0. Поэтому, когда возвращаются несколько значений, значение t присваивается переменной k.

РЕКОМЕНДУЕМЫЕ СТАТЬИ