Small Grey Outline Pointer 함수 심화 문제 /배열을 전달 받는 함수/call by value / call by reference
본문 바로가기
Dev./C++

함수 심화 문제 /배열을 전달 받는 함수/call by value / call by reference

by sso. 2022. 3. 30.

 

[01] 배열을 전달 받는 함수 예제

#include <stdio.h>

int arrinput(int *arr, int a)
{
	for (int i = 0; i < a; i++) {
		printf("%d번째 값 입력: ", i + 1);
		scanf_s("%d", &arr[i]);
	}
}

int readArray(int* arr, int length)
{

	printf("배열의 요소 읽어보기: [ ");
	for (int i = 0; i < length; i++) {
	
		printf("%d", arr[i]);
		if (i + 1 < length)
		{
			printf(", ");
		}
		else
		{
			printf(" ");
		}
	}
	printf("]\n");

}



int main()
{

int arr[3];
arrinput(arr, 3);
readArray(arr, 3);

}

1번째 값 입력: 4
2번째 값 입력: 8
3번째 값 입력: 9
배열의 요소 읽어보기: [ 4, 8, 9 ]

 

 

 

 


<call by value / call by reference의 차이>

 

 

#include<stdio.h>

int input(int seq) {
	int a;
	printf("%d번째 값을 입력:", seq);
	scanf_s("%d", &a);
	return a;
}
void swapNumber(int num1, int num2) {
	int tem = num1;
	num1 = num2;
	num2 = tem;
	printf("함수 안에서 확인한 결과, num1: %d, num2: %d\n", num1, num2);
}
void ex163() {
	int number1 = 33, number2 = 99;
	number1 = input(1);
	number2 = input(2);
	printf("함수 호출 완료 전 확인한 결과, number1: % d, number2 : %d \n", number1, number2);
	swapNumber(number1, number2);
	printf("함수 호출 완료 후 확인한 결과, number1: %d, number2: %d\n", number1, number2);
}
void swapNumber2(int* num1, int* num2) {
	int tem = *num1;
	*num1 = *num2;
	*num2 = tem;
	printf("함수 안에서 확인한 결과, num1: %d, num2: %d\n", *num1, *num2);
}
void ex164() {
	int number1 = 33, number2 = 99;
	number1 = input(1);
	number2 = input(2);
	printf("함수 호출 완료 전 확인한 결과, number1: % d, number2 : %d \n", number1, number2);
	swapNumber2(&number1, &number2);
	printf("함수 호출 완료 후 확인한 결과, number1: %d, number2: %d\n", number1, number2);
}
void main() {
	
	ex163();
	ex164();
}

 

1번째 값을 입력:4
2번째 값을 입력:5
함수 호출 완료 전 확인한 결과, number1:  4, number2 : 5
함수 안에서 확인한 결과, num1: 5, num2: 4
함수 호출 완료 후 확인한 결과, number1: 4, number2: 5
1번째 값을 입력:3
2번째 값을 입력:8
함수 호출 완료 전 확인한 결과, number1:  3, number2 : 8
함수 안에서 확인한 결과, num1: 8, num2: 3
함수 호출 완료 후 확인한 결과, number1: 8, number2: 3

 

 

#include<stdio.h>
int input(int seq) {
	int a;
	printf("%d번째 값을 입력:", seq);
	scanf("%d", &a);
	return a;
}
int getDiffByValue(int a1, int a2) {
	return a1 - a2;
}
void callDiffByRef(int* a1, int* a2) {
	if (*a1 < *a2) {
		int tmp = *a1;
		*a1 = *a2;
		*a2 = tmp;
	}
}
void pr1() {
	int x1 = input(1);
	int x2 = input(2);
	printf("getDiffByValue(x1,x2): %d\n ", getDiffByValue(x1, x2));
	callDiffByRef(&x1, &x2);
	printf("callDiffByRef(&x1, &x2) x1: %d, x2: %d", x1, x2);

}


void main() {
	pr1();
	
}

1번째 값을 입력:3
2번째 값을 입력:4
getDiffByValue(x1,x2): -1
 callDiffByRef(&x1, &x2) x1: 4, x2: 3

 


#include<stdio.h>

void swapNumvbers(int* a1, int* a2, int* a3) {
	int tmp = *a1;
	*a1 = *a3;
	*a3 = *a2;
	*a2 = tmp;
}
void pr2() {
	int num1 = 5, num2 = 8, num3 = 10;
	printf("함수 호출 전 num1 num2 num3: %d %d %d \n", num1, num2, num3);
	swapNumvbers(&num1, &num2, &num3);
	printf("함수 호출 후 num1 num2 num3: %d %d %d \n", num1, num2, num3);
}
int recursiveSum(int n, int* result) {
	if (n != 0) {
		*result += n;
		n--;
		recursiveSum(n, result);
	}
	return *result;
}



void main() {

	pr2();
	
}

함수 호출 전 num1 num2 num3: 5 8 10
함수 호출 후 num1 num2 num3: 10 5 8

 

 

 

 

#include <stdio.h>

int input(int seq)
{
	int a;
	printf("%d번째 값을 입력해 주세요: ", seq);
	scanf_s("%d", &a);
	return a;
}

void getDiffByValue(int num1, int num2)
{
	//두 수의 차 구하기

	printf("두 수의 차 : %d\n", num1 - num2);
}

//두 수 중 큰 정수 구하기
void callDiffByRef(int *num1, int *num2)
{
	*num1 = &num1;
	*num2 = &num2;

}

void run2(int *num1, int *num2)
{

	int temp;
	if (*num1 < *num2) {
		temp=*num2;
		*num2 = *num1;
		*num1 = temp;
	}
	printf("두 수 중 큰 정수의 값이 앞으로 오도록 : %d %d\n", *num1, *num2);

}


void main()
{
	int num1, num2;
	num1 = input(1);
	num2 = input(2);

	getDiffByValue(num1, num2);



	run2(&num1,&num2);

}

1번째 값을 입력해 주세요: 3
2번째 값을 입력해 주세요: 9
두 수의 차 : -6
두 수 중 큰 정수의 값이 앞으로 오도록 : 9 3

 

 

 

 

[03] 1~n까지의 합 구하기

void pr3() { //1~n까지의 합
	int n = input(1);
	int result = 0;
	result = recursiveSum(n, &result);
	printf("결과: %d", result);
}



void main() {

	pr3();
}

1번째 값을 입력:5
결과: 15

728x90

댓글