본문 바로가기
PROGRAMMING/C

C언어 Function 응용 #2 (사용자 정의 함수)

by 쪼렙엔지니어 2022. 11. 23.
반응형

오늘은 c언어 사용자 정의 함수의 활용법 중에서 함수의 매개변수(인자)를 이중포인터와 2차원 배열로 만들어서 사용하는 방법에 대해서 이야기 해 보겠습니다. 전혀 어려운 내용은 아닙니다. 바로 알아보도록 하지요.

 

1. 함수에서 이중포인터 사용

먼저 이중포인터를 기억해 내어야 겠네요. 이중포인터에 대한 내용은 아래 포스팅에서 포인터의 포인터 부분 내용을 먼저 확인 하시기 바랍니다.

https://mech19.tistory.com/193

 

C언어 포인터 심화과정 (배열과 포인터, 포인터의 포인터)

자~ 포인터 심화과정 3번째 시간입니다. 포인터에 대해서는 조금 익숙해 지셨나요? 사실 포인터가 C언어에서 가장 난해하고 어려운 부분입니다. 최대한 쉽게 설명하고 있지만 실제로 어려운건

mech19.tistory.com

간단히 얘기하자면 어떠한 데이터를 가지고 있는 변수의 주소정보를 가지고 있는게 포인터고 그 포인터의 주소정보를 가지고 있는게 포인터의 포인터 즉, 이중포인터 입니다. 이전시간에 알아보았듯이 함수에서 포인터를 사용했으니 당연히 이중포인터도 사용이 가능 하겠지요? 그럼 간단한 예제를 먼저 보겠습니다.

일단 main 함수부분에서 변수 a와 포인터 ptr을 선언한 뒤 변수 a에는 숫자 1을 대입하고, 포인터 ptr이 변수 a의 주소정보를 가지게 하였습니다. 그리고 사용자 정의 함수 change를 선언하면서 매개변수(인자)로 이중포인터 dptr을 넣었습니다. 

사용자 정의 함수 change에서 주의깊게 보아야 하는 부분은 { }중괄호 속의 **dptr입니다. 포인터는 주소값을 가지고 있기 때문에 해당 주소값에 저장되어 있는 데이터값을 핸들링 하려면 포인터이름 앞에 *을 붙여야 하며, 이중포인터의 경우에는 **을 붙여야 합니다. 꼭 기억하시기 바랍니다. 위 내용을 그림으로 표현 하자면 아래와 같습니다.

그럼 실제로 실행했을 때 결과값이 어떻게 나오는지 한번 보도록 하겠습니다.

값이 정상적으로 잘 바뀌었음을 확인 할 수 있습니다. 어려운 것 없죠? 포인터에 대해 잘 이해하고 있었으면 이런 곳에서 편하게 활용 할 수 있습니다. 그럼 다음 내용으로 넘어가 보겠습니다.

 

2. 함수에서 2차원 배열 사용

이번에는 2차원 배열입니다. 이전에 함수에서 매개변수(인자)자리에 변수가 아닌 배열을 이용하는 법은 알아보았었습니다. 기억하시는지요? 혹시 기억이 잘 나지 않으신다면 아래 포스팅을 확인하시기를 추천드립니다.

https://mech19.tistory.com/201

 

C언어 Function 응용 #1 (사용자 정의 함수)

오늘은 C언어의 사용자 정의 함수에 대해 좀 더 다양한 사용법을 이야기 해 보려고 합니다. 지난시간까지 해서 두번에 걸쳐 C언어 function(사용자 정의 함수)에 대해 조금 알아보았었습니다. 혹시

mech19.tistory.com

그리고 먼저 알아두어야 할 것이 있습니다. 바로 2차원 배열의 포인터 형태 입니다. 2차원 배열은 열의 개수가 2개인 배열을 의미하죠? 형태는 아래와 같습니다.

위와 같은 크기를 가진 배열은 총 6개의 원소를 가지게 되며 아래와 같이 존재합니다.

그리고 배열은 메모리 상에서 순서대로 나열되는 특성을 가지고 있었죠? 그렇기 때문에 이러한 2차원 배열은 메모리상에서 아래와 같이 순서대로 나열됩니다.

여기까지는 예전에 배열에 대해 공부할 때 모두 알아보았던 내용입니다. 그럼 이러한 배열의 포인터는 어떻게 선언할 까요? 단순 1차원 배열일때는 일반적인 포인터의 형태를 사용 했었는데 2차원 배열일때는 조금 다르게 작성해야 합니다.

바로 이러한 형태가 위의 2차원 배열을 가리키는 포인터의 형태입니다. 그럼 바로 예제로 들어가 보도록 하겠습니다.

배열이다보니 일일이 각각의 값을 입력하기 힘들어서 for문을 이용했습니다. 이건 따로 설명드리진 않겠습니다. 핵심적으로 보아야 하는 부분은 아무래도 사용자 정의 함수를 선언하는 부분과 main함수에서 사용자 정의 함수를 호출 하는 부분이겠지요.

사용자 정의 함수를 선언하는 부분에서 2차원 배열을 지목하기 위한 포인터의 형태는 아까 위에서 배웠습니다. 그부분을 그대로 적용하시면 됩니다.

그리고 main함수에 사용자 정의 함수를 호출 할 때는 배열의 이름이 곧 배열의 첫번째 원소의 주소값이기 때문에 위와 같이 적용하시면 됩니다. 그럼 직접 실행하여 실행 결과가 어떻게 나오는지 한번 보겠습니다.

네. 바로 별 무리 없이 정상적으로 작동하는 것을 알 수 있습니다. 2차원 배열을 지목하는 포인터의 형태만 알면 간단합니다. 이제 C언어의 사용자 정의 함수에 대한 내용을 많이 배웠습니다. 이렇게 필요한 내용을 함수로 만들어 두면 필요할 때마다 잘 사용하시면 됩니다. 오늘은 여기까지 입니다. 감사합니다. ^^

 

제 블로그를 방문해 주셔서 감사합니다.

도움이 되셨다면 공감(좋아요) 부탁드리고,

댓글은 다른분들께도 좋은 정보일 수 있으니

공개로 부탁드립니다.

여러분의 작은 정성이 좋은 포스팅을 생산하는

힘이 된답니다. :)

감사합니다.

 

반응형

댓글