본문 바로가기
ProgrammingLanguage/C언어

C언어 | 이중 포인터 예제

by 씽쌩쏭 2021. 2. 14.
728x90

✅오늘의 문제 : 최대값 구하기

이중 포인터와 크기가 5인 배열을 선언하고, 함수를 사용해서 입력된 수 중 최대값을 출력해보세요.

 

  • 함수는 void형입니다.
  • 최대값을 저장하는 이중 포인터 변수는 main함수에 초기화해야합니다.

(코뮤니티 모각코 과정 中 출제된 문제입니다.)

 

[초안]

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void maxnum(int *max, int numarr[]); //함수 선언(최대값 구하는 함수)

int main() {
	int numarr[5]; //배열 선언
	int j; //최댓값을 받을 변수

	for (int i = 0; i < 5; i++) { //5개 수 입력 받기
		scanf("%d", &numarr[i]);
	}

	maxnum(&j, numarr); //함수 호출
	printf("\n\n최대값 : %d", j);

	return 0;
}

void maxnum(int *max, int numarr[]) { //함수 정의
	int** Max = &max; //이중포인터 변수로 포인터 변수의 주소값 저장
	**Max = *numarr; //이중포인터 초기화
	for (int i = 0; i < 5; i++) {
			if(**Max < numarr[i]) {
			**Max = numarr[i];
		}
	}
}

 

기능적으로는 완벽히 동작하는 코드였다.

 

하지만...

 

문제에서 최대값을 저장하는 이중포인터 변수를 main 함수에 초기화 하라는 말을 못보고 작성한 코드라

틀렸음ㅠㅠ!!

 

그리고...변수명은 소문자가 원칙이다...

 

다시 풀었다...

 

// 이중 포인터와 크기가 5인 배열을 선언하고, 함수를 사용해서 입력된 수 중 최대값을 출력해보세요.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void maxnum(int **pptr, int numarr[]); //함수 선언(최대값 구하는 함수)

int main() {
	int numarr[5]; //배열 선언
	int max = 0; //최댓값을 받을 변수
	int* ptr = &max; // ptr = > max의 메모리 주소
	int** pptr = &ptr; // pptr = > ptr의 메모리 주소

	for (int i = 0; i < 5; i++) { //5개 수 입력 받기
		scanf("%d", &numarr[i]);
	}

	maxnum(pptr, numarr); //함수 호출
	printf("\n최대값 : %d\n", max);

	return 0;
}

void maxnum(int **pptr, int numarr[]) { //함수 정의
	for (int i = 0; i < 5; i++) {
		if(**pptr < numarr[i]) { //numarr[i]값이 max값보다 크면
			**pptr = numarr[i]; // max = numarr[i]
		}
	}
}

 

원래 maxnum 함수에서 선언 및 초기화해줬던 Max(이중포인터)를

main에서 pptr로 초기화해주고, maxnum 함수에서 pptr을 인자로 받아 사용하는 형태로 만들었다.

 

 

깔끔...