# [C] ํฌ์ธํฐ(Pointer)
ํฌ์ธํฐ : ํน์ ๋ณ์๋ฅผ ๊ฐ๋ฆฌํค๋ ์ญํ ์ ํ๋ ๋ณ์
main์์ ํ๋ฒ ๋ง๋ค์ด๋ ๋ณ์ ๊ฐ์ ๋ค๋ฅธ ํจ์์์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ฑฐ๋, ๋ณ๊ฒฝํ๊ณ ์ถ์ ๊ฒฝ์ฐ๊ฐ ์๋ค.
๊ฐ์ ์ง์ญ์ ์๋ ๋ณ์๋ผ๋ฉด ์ฌ์ฉ ๋ฐ ๋ณ๊ฒฝ์ด ๊ฐ๋จํ์ง๋ง, ๋ค๋ฅธ ์ง์ญ์ธ ๊ฒฝ์ฐ์๋ ํด๋น ๊ฐ์ ์์ ๋ณ์๋ก ๋ฐ์ ๋ฐํํ๋ ์์ผ๋ก ์ฒ๋ฆฌํ๋ค.
์ด๋ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ!
ํฌ์ธํฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๊ณ ํด๋น ๊ณต๊ฐ์ ๊ธฐ์ตํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค.
์๋์ ๊ฐ์ ์ฝ๋๊ฐ ์์ ๋๋ฅผ ํ์ธํด๋ณด์
#include<stdio.h>
int ReturnPlusOne(int n) {
printf("%d\n", n+1);
return n + 1;
}
int main(void) {
int number = 3;
printf("%d\n", number);
number = 5;
printf("%d\n", number);
ReturnPlusOne(number);
printf("%d\n", number);
return 0;
}
[์ถ๋ ฅ ๊ฒฐ๊ณผ]
3
5
6
5
main์ number์ function์ n์ ๋ค๋ฅธ ๋ณ์๋ค.
์ด์ ํฌ์ธํฐ๋ก ๋ฌธ์ ๋ฅผ ์ ๊ทผํด๋ณด๋ฉด?
#include<stdio.h>
int ReturnPlusOne(int *n) {
*n += 1;
}
int main(void) {
int number = 3;
printf("%d\n", number);
number = 5;
printf("%d\n", number);
ReturnPlusOne(&number);
printf("%d\n", number);
return 0;
}
[์ถ๋ ฅ ๊ฒฐ๊ณผ]
3
5
6
ํฌ์ธํฐ๋ฅผ ํ์ฉํด์ ์ฐ๋ฆฌ๊ฐ ๊ธฐ์กด์ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
int* p;
: intํ ํฌ์ธํฐ๋ก p๋ผ๋ ์ด๋ฆ์ ๋ณ์๋ฅผ ์ ์ธ
p = #
: p์ ๊ฐ์ num ๋ณ์์ ์ฃผ์๊ฐ ๋์
printf("%d", *p);
: p์ *๋ฅผ ๋ถ์ด๋ฉด p์ ๊ฐ๋ฆฌํค๋ ์ฃผ์์ ์๋ ๊ฐ์ ๋ํ๋
printf("%d", p);
: p๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ์ฃผ์๋ฅผ ๋ํ๋
#include<stdio.h>
int main(void) {
int number = 5;
int* p;
p = &number;
printf("%d\n", number);
printf("%d\n", *p);
printf("%d\n", p);
printf("%d\n", &number);
return 0;
}
[์ถ๋ ฅ ๊ฒฐ๊ณผ]
5
5
์ฃผ์๊ฐ
์ฃผ์๊ฐ
๊ฐ๋ฆฌํค๋ ์ฃผ์ - ๊ฐ๋ฆฌํค๋ ์ฃผ์์ ์๋ ๊ฐ์ ์ฐจ์ด๋ค.
# ์ด์ค ํฌ์ธํฐ
ํฌ์ธํฐ์ ํฌ์ธํฐ, ์ฆ ํฌ์ธํฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ๋งํ๋ค.
#include <stdio.h>
int main()
{
int *numPtr1; // ๋จ์ผ ํฌ์ธํฐ ์ ์ธ
int **numPtr2; // ์ด์ค ํฌ์ธํฐ ์ ์ธ
int num1 = 10;
numPtr1 = &num1; // num1์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์ ์ฅ
numPtr2 = &numPtr1; // numPtr1์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์ ์ฅ
printf("%d\n", **numPtr2); // 20: ํฌ์ธํฐ๋ฅผ ๋ ๋ฒ ์ญ์ฐธ์กฐํ์ฌ num1์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์ ๊ทผ
return 0;
}
[์ถ๋ ฅ ๊ฒฐ๊ณผ]
10
ํฌ์ธํฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ์ฅํ ๋๋, ์ด์ค ํฌ์ธํฐ๋ฅผ ํ์ฉํด์ผ ํ๋ค.
์ค์ ๊ฐ์ ๊ฐ์ ธ์ค๊ธฐ ์ํด **numPtr2
์ฒ๋ผ ์ญ์ฐธ์กฐ ๊ณผ์ ์ ๋๋ฒํ์ฌ ๊ฐ์ ธ์ฌ ์ ์๋ค.