생선이의 잡다한 블로그
C언어 강좌 31 - 포인터 변수 본문
안녕하세요 생선스프입니다!
이번 강좌에서는 포인터 변수를 알아보려고 합니다.
포인터 변수에는 일반 변수와는 다르게 메모리의 주소값이 들어가게 됩니다.
그리고 포인터 변수는 자료형 * 변수명 으로 선언합니다.
자료형과 변수명 사이에 있는 *의 위치는 중간에만 있다면 어디에 있어도 문제가 없습니다.
이제 아래 코드를 먼저 보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h> void main() { int num1 = 10; int * numPtr; numPtr = &num1; printf("%p %p", &num1, numPtr); } | cs |
위의 코드는 num1의 주소값을 numPtr이라는 포인터 변수에 넣고 출력하는 코드입니다
즉, 같은 값이 출력되는 것이죠
그럼 이제 이 포인터 변수에 주소를 담았으면 이 주소에 있는 값을 가져올 수도 있어야겠네요
아래 코드를 보겠습니다
1 2 3 4 5 6 7 8 9 10 11 | #include <stdio.h> void main() { int num1 = 10; int * numPtr; numPtr = &num1; printf("%d", *numPtr); } | cs |
위의 코드를 실행시키면 num1의 값인 10이 출력됩니다
즉 numPtr에 저장된 주소에 있는 값을 *을 이용해서 가져온 것입니다
여기서 * 은 역참조 연산자라고 합니다
* 하나에 한 번 따라간다고 보면 됩니다.
만약 *이 두 개라면 한 번 갔는데 그게 또 포인터 변수라면 또 갈 수 있는것이죠
아래의 코드처럼 말이죠
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> void main() { int num1 = 10; int * numPtr1; int ** numPtr2; numPtr1 = &num1; numPtr2 = &numPtr1; printf("%d", **numPtr2); } | cs |
그럼 이 포인터 변수가 왜 필요한 것일까요?
크게 두 가지 경우가 있습니다
1. 함수의 반환값을 두 개 이상 받아오기 위해
2. 동적할당시에 메모리 값을 저장하기 위해
두 번째 이유인 동적할당은 나중에 강좌로 다시 보도록 하고
우선 첫 번째 이유를 보도록 하겠습니다
저희가 사칙연산을 해주는 함수를 만든다고 하겠습니다
함수 하나로 덧셈, 뺄셈, 곱셈, 나눗셈을 한 결과를 전부다 리턴해 줄 수는 없습니다
return으로는 오직 한 개의 값밖에 반환할 수 없기 때문이죠
이때 포인터 변수를 이용해주면 됩니다
함수의 인자값으로 두 개의 수와 결과 값을 저장해둘 변수의 주소를 담아둔 포인터 변수를 넘겨주면 되겠네요
아래와 같이 말이죠
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdio.h> void calc(int num1, int num2, int * sum, int * sub, int * mul, int * div) { *sum = num1 + num2; *sub = num1 - num2; *mul = num1 * num2; *div = num1 / num2; } void main() { int num1 = 3, num2 = 2, sum, sub, mul, div; int *sumPtr, *subPtr, *mulPtr, *divPtr; sumPtr = ∑ subPtr = ⊂ mulPtr = &mul; divPtr = ÷ calc(num1, num2, sumPtr, subPtr, mulPtr, divPtr); printf("%d %d %d %d",sum,sub,mul,div); } | cs |
위의 코드를 보면 각각의 포인터 변수들에 값을 저장할 변수의 주소값을 넘겨줍니다.
그리고 각각의 연산을 한 뒤에 그 주소가 가리키는 곳에다가 값을 넣어줍니다.
여기서 중요한 것을 반드시 포인터 변수는 포인터 형태로 받아주어야 합니다
이런 식으로 하나의 함수에서 여러개의 값을 건드릴 수 있습니다.
그럼 이번 강좌는 여기서 마치도록 하겠습니다
강좌 읽어주셔서 감사합니다
공감과 댓글은 생선에게 힘이됩니다!
'프로그래밍 > C언어 강좌' 카테고리의 다른 글
C언어 강좌 30 - 자료형 변환 (0) | 2018.02.09 |
---|---|
C언어 강좌 29 - 구조체를 사용해보자! struct (0) | 2017.12.11 |
C언어 강좌 28 - 자료형에 새로운 이름을 만들어주자! typedef (0) | 2017.12.10 |
C언어 강좌 27 - 난수(랜덤)을 만들어보자! rand (0) | 2017.12.09 |
C언어 강좌 26 - 값을 넣어보자! strcpy string.h (0) | 2017.12.08 |