개발자 데뷔!

[C/C++ 7.4] 함수에서 값 2개이상 return 하기 본문

프로그래밍 언어/C

[C/C++ 7.4] 함수에서 값 2개이상 return 하기

물꼮이 2022. 3. 15. 21:11

 

원칙적으로 c/c++ 에선,

 * 절대 return 함수값이 항상 1 개 뿐이다!! 

 

2개 이상의 값을 return 하는 것은 원칙적으로 불가능 하지만, 

다음의 방법을 통해 우회적으로 여러개의 값을 이동시킬 수 있다. 


1. 함수에 배열을 직접 전달

 - 사실은, 배열을 전달하는 것 자체가,

   => 배열의 시작점(첫 index)의 주소값을 전달하는것임 

 - 즉, return을 따로 안해도, 주소값에 접근해 값 자체를 바꿈 

 - 배열 함수전달은 포인터없이도 주소값을 넘기는 것이기 때문에

   값을 따로 다른변수에 입력받아 쓰지 않아도 됨 !! 

void PrintAll(int array[6]) {			// 함수에 배열 전달
	for (int i = 0; i < 6; i++)
		cout << array[i]<<endl;
}

int main() {
	int arr[6] = {1,2,3,4,5,6};

	PrintAll(arr);					// 함수 안에 배열 전달
	return 0;

}

 

2. 포인터로 배열 전달 (return 대신)

- 주로 사용하기만 하는 변수는 그냥 받고,

- 값 저장해야 하는 변수는 포인터로 선언해 주소값을 넘긴다!!! ******

int ABC(int a, int b, int *SUM, int *GOP) {	//int *SUM;  SUM = &A;	//1.포인터변수 선언 & 2.주소값 할당
	*SUM = a + b;		//*SUM = a+b;				//3. 할당된 주소의 '값(*)'에 값 입력
	*GOP = a * b;
	return 0;
}
int main() {
	int a, b;
	int SUM, GOP;
	cin >> a >> b;			
	ABC(a, b, &SUM, &GOP);		// SUM, GOP값이 안 정해져 있어도 됨! (초기화만 해놓는다면)
	cout << SUM <<" "<< GOP;
	return 0;
}

 

 

//6번
int arr[2][6] = { {4,5,6,1,3,1},{2,1,3,6,3,6} };		//함수에서 포인터 사용 총정리 !!!!! *****
int input(int* a,int* b,int* c) {
	// 주소값을 받아와 포인터변수로 가리킴
	cin >> *a >> *b >> *c;
	return 0;
}
int process(int a,int b,int c,int* ac,int* bc,int* cc) {
	// 함수 내에서 사용하는 일반 변수 3개,
	// 값을 저장해야 하는 포인터 변수 3개
	*ac=0, *bc=0, *cc=0;
	for (int i = 0; i < 2; i++) {
		for (int j = 0; j < 6; j++) {
			if (arr[i][j] == a)
				*ac = *ac+1;			// 값 사용할 때는 항상 역참조 해서 사용!!!
			else if (arr[i][j] == b)
				*bc = *bc+1;
			else if (arr[i][j] == c)
				*cc = *cc+1;
		}
	}
	return 0;
}
int output(int a,int b,int c,int ac,int bc,int cc) {
	// 어쨋든 위 6개 변수 전부 출력할 때 필요하니까 전부 변수로 받음
	cout << a << "=" << ac << "개" << endl;
	cout << b << "=" << bc << "개" << endl;
	cout << c << "=" << cc << "개" << endl;

	return 0;
}
int main() {
	int a, b, c;
	int ac, bc, cc;
	//포인터 함수 argument 로 사용하는 법 !!
	input(&a,&b,&c);		//argument
	process(a,b,c,&ac,&bc,&cc);
	output(a,b,c,ac,bc,cc);
	return 0;
}

 

3. 전역 변수로 선언해 사용 (return 대신)