반환값

return by value
리턴타입으로 선언된 자료형을 반납해준다.
단점은 변수가 여러번 생성된다.

return by address
리턴타입으로 포인터형식 즉 주소값을 받는다.
동적할당할때 사용할 수 있다.
단점, delete위치가 애매하다.
주소값만 받아오기에 안에 값이 다를 수 있다.

return by reference
변수를 선언해서 받으면 문제없이 받아올 수 있다.
받는쪽에서 참조변수로 받으면 문제가 될 수 있다.
메모리가 안정적으로 선언된 변수,자료형에서는 사용하기 용이하다.

반환값 여러개 받기
구조체를 선언해 여러개를 받는 방법이 있다.
단점은 함수하나를 만들때마다 구조체를 만들어줘야한다.
튜플tuple을 사용하는 법이있다.
get<0>(튜플명)으로 받아야하는 귀찮음이 있지만
c++ 17에선 auto로 받을 수 있다.

 

#include <iostream>
#include <tuple>

using namespace std;

int returnByValue(int a) {
	a += 4;
	cout << "value : " << &a << " a : " <<a << endl;
	return a;
}


int* returnByAddress(int size) {
	return new int[size];
}

int& returnByReference(int a) {
	int b = 10;
	cout << "reference : " << &b << " b : " << b << endl;
	return b;
}

tuple<int,double> getTuple()
{
	int a = 10;
	double b = 3.14;
	return make_tuple(a, b);
}

int main()
{
	//Return By Value
	int val = returnByValue(3);
	cout << "&val : " << &val << " val : " << val << endl;
	
	//동적할당 포인터 반환
	int *ptr = returnByAddress(3);
	cout << "ptr : " << ptr << endl;

	int rVal = returnByReference(3);
	cout << "&rVal : " << &rVal << endl;
	cout << rVal << endl;
	cout << rVal << endl;
	
	int &rVal2 = returnByReference(3);
	cout << "&rVal2 : " << &rVal2 << " rVal2 : "<<rVal2 << endl;
	val = returnByValue(5);
	cout << "&val : " << &val << " val : " << val << endl;
	
	//튜플사용하기
	tuple<int, double> my_t = getTuple();
	cout << get<0>(my_t) << endl;
	cout << get<1>(my_t) << endl;

	//c++ 17 에서 사용가능
	//auto[a, b] = getTuple();
	return 0;
}
#리스트 복사
i = [1,2,3,4,5]
j = i
print('j = ',j)
print('i = ',i)
print('--------------')
j[0] = 100
#i,j의 주소값이 같으므로 값이 모두 변한다.
#참조전달
print('id(j) = ',id(j))
print('id(i) = ',id(i))
print('j = ',j)
print('i = ',i)
print('--------------')

#리스트 복사하기(두개다 가능)
#copy가 명시적으로 더 잘보임
#수치전달
x = j.copy()
x = j[:]
x[0] = 200
print('id(j) = ',id(j))
print('id(x) = ',id(x))
print('j = ',j)
print('x = ',x)
print('--------------')

"""
출력결과
j = [1, 2, 3, 4, 5]
i = [1, 2, 3, 4, 5]
--------------
id(j) = 4499210056
id(i) = 4499210056
j = [100, 2, 3, 4, 5]
i = [100, 2, 3, 4, 5]
--------------
id(j) = 4499210056
id(x) = 4735167240
j = [100, 2, 3, 4, 5]
x = [200, 2, 3, 4, 5]
--------------
"""

#튜플
#()로 표현한다
#데이타 조작 보다는 읽어 쓸때 사용한다.
#질문 보기등에 사용하기 유용하다.
print(help(tuple))
t = (1,2,3,4,1,2)
print(type(t))
print('--------------')
#값변경 안됌
#t[0] = 100
#에러남

#튜플안에 배열을 넣을수 있다
#배열은 수정가능하다
t = ([1,2,3],[4,5,6])
print(t)
t[0][0] = 200
print(t)
print('--------------')

#튜플의 언패킹
t = (10,20)
print(t)
x, y = t
#x, y = 10,20 과 같다.
print(x, y)
#대표적인 사용예
min, max = 0, 100
print(min, max)
#값변경도 가능
min, max = max, min
print(min, max)
print('--------------')
"""
출력결과
<class 'tuple'>
--------------
([1, 2, 3], [4, 5, 6])
([200, 2, 3], [4, 5, 6])
--------------
(10, 20)
10 20
0 100
100 0
--------------
"""


+ Recent posts