1. ํฌ์ธํฐ
- ์ ์: ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๋ณ์๋ก, ์คํ์ค์ธ ํ๋ก์ธ์ค์ ์์ ์ฃผ์์ ์ ๊ทผ ํ ์ ์๊ฒ ํ๋ค.
- ํฌ์ธํฐ๋ฅผ ์ด์ฉํ์ฌ ํ๋ก์ธ์ค์ ์ํ๋ ์์ญ์ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
ํฌ์ธํฐ ์๋ฃํ
- ์ข
๋ฅ: ํฌ์ธํฐ ๋ณ์, ๋ฐฐ์ด ํฌ์ธํฐ, ํฌ์ธํฐ ๋ฐฐ์ด, ํจ์ ํฌ์ธํฐ, ๋ค์ค ํฌ์ธํฐ, voidํ ํฌ์ธ
- ํฌ์ธํฐ ๋ณ์: ๋ค๋ฅธ ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ๋ณ์
- ๋ฐฐ์ด ํฌ์ธํฐ: ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ ex) int (*arrPtr)[10]; (10๊ฐ์ ์ ์๋ฅผ ๊ฐ์ง ๋ฐฐ์ด์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ)
- ํฌ์ธํฐ ๋ฐฐ์ด: ํฌ์ธํฐ๋ฅผ ์์๋ก ๊ฐ์ง๋ ๋ฐฐ์ด ex) int *ptrArray[10]; (์ ์ํ ํฌ์ธํฐ 10๊ฐ๋ฅผ ๊ฐ์ง ๋ฐฐ์ด)
- ํจ์ ํฌ์ธํฐ: ํจ์๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ ex) void (*funcPtr)(int); (์ ์๋ฅผ ์ธ์๋ก ๋ฐ๋ ํจ์ ํฌ์ธํฐ)
- ๋ค์ค ํฌ์ธํฐ: ํฌ์ธํฐ๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ ex) int **pp; (์ ์ํ ํฌ์ธํฐ๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ)
- voidํ ํฌ์ธํฐ: ํน์ ์๋ฃํ์ ์ข ์๋์ง ์๋ ํฌ์ธํฐ ex) void *vp
ํฌ์ธํฐ ๋ณ์
*๋ฅผ ์ถ๊ฐํ์ฌ ์ ์ธ
์๋ฃํ *๋ณ์์ด๋ฆ;
ex) int *ip; (์ ์ํ ํฌ์ธํฐ)
ex) char *cp; (๋ฌธ์ํ ํฌ์ธํฐ)
ex) double *dp; (์ค์ํ ํฌ์ธํฐ)
- &(์ฃผ์์ฐ์ฐ์): ๋ณ์์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ ์ฃผ์๋ฅผ ๋ฐํํ๋ ์ฐ์ฐ์
- *(ํฌ์ธํฐ์ฐ์ฐ์): ํฌ์ธํฐ ๋ณ์๊ฐ ๊ฐ๋ฆฌํค๋ ๊ณณ์ ๋ด์ฉ์ ์ฐธ์กฐํ๋ ์ฐ์ฐ์
#include <stdio.h>
int main() {
int var = 20; // ์ผ๋ฐ ๋ณ์
int *ptr; // ํฌ์ธํฐ ๋ณ์ ์ ์ธ
ptr = &var; // var์ ์ฃผ์๋ฅผ ptr์ ์ ์ฅ
printf("var์ ๊ฐ: %d\n", var); // 20
printf("var์ ์ฃผ์: %p\n", (void*)&var); // var์ ์ฃผ์
printf("ptr์ด ๊ฐ๋ฆฌํค๋ ๊ฐ: %d\n", *ptr); // 20
printf("ptr์ ์ฃผ์: %p\n", (void*)ptr); // var์ ์ฃผ์์ ๋์ผ
return 0;
}
๋ณ์ | ํฌ์ธํฐ ๋ณ์ | |
์ ์ธ | double num; | double *ptr; |
๋ฉ๋ชจ๋ฆฌ ํ ๋น | 8 | 4 (32bit ์ด์์ฒด์ ) |
์ ์ฅ | ์ค์ํ ๋ฐ์ดํฐ | ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ |
๊ฐ ์ ๊ทผ | num, ๋ณ์๋ช ์ฌ์ฉ | *ptr, ์ ์ฅ๋ ์ฃผ์ ๊ฐ ์ฐธ์กฐ |
๊ฐ ์ ๊ทผ๋ฐฉ์ | ์ง์ ์ ๊ทผ | ๊ฐ์ ์ ๊ทผ |
ํฌ์ธํฐ ๋ณ์ ์ฌ์ฉ ์ ๊ท์น
- *๋ณ์๋ช ์ผ๋ก ์ ์ธํ์ฌ ์ปดํ์ผ๋ฌ์๊ฒ ํฌ์ธํฐ ๋ณ์์์ ์๋ฆผ
- ์๋ฃํ์ ์ฐธ์กฐํ ์๋ฃํ๊ณผ ๊ฐ์์ผ ํ๋ค. -> ๋ฏธ์ค์ ์ ๋ฐ์ดํฐ ์ฐธ์กฐ ์ค๋ฅ
- ์คํ์ ์ฃผ์๋ฅผ ๋์ ๋ฐ์์ผํด์ & ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ ์์ ์ฃผ์ ์ฌ์ฉํด์ผ ํ๋ค.
- *๋ณ์๋ช ์ ํฌ์ธํฐ ์ฐ์ฐ์๋ก ์์ ์ด ๋ณด๊ดํ๊ณ ์๋ ์ฃผ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ทผ(๊ฐ์ ์ฐธ์กฐ)
- ํฌ์ธํฐ ๋ณ์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ ์ธ๋๋ ์๋ฃํ๊ณผ ์๊ด์์ด ์ด์์ฒด์ ์ ๋ฐ๋ผ ํฌ๊ธฐ ๊ฒฐ์ (32bit ์ด์์ฒด์ -> 4Byte)
*์ ์ฉ๋
- ํฌ์ธํธ ์ ์ธ
- ํด๋น ์ฃผ์์ ๊ฐ์ด ์ ๊ทผํ๋ ์ฉ๋
#include <stdio.h>
// ์ค์ ํจ์ ์ ์
void swap(int *a, int *b) {
int temp;
temp = *a; // a๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ ์ ์ฅ
*a = *b; // b๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ a์ ์ ์ฅ
*b = temp; // temp์ ์ ์ฅ๋ ๊ฐ์ b์ ์ ์ฅ
}
int main() {
int x = 5;
int y = 10;
printf("์ค์ ์ : x = %d, y = %d\n", x, y);
swap(&x, &y); //x์ ์ฃผ์์ y์ ์ฃผ์
printf("์ค์ ํ: x = %d, y = %d\n", x, y);
return 0;
}
2. ํฌ์ธํฐ ์ฐ์ฐ
- ์ ์: ์ฃผ์๋ฅผ ๋์์ผ๋ก ์ฐ์ฐ์ฒ๋ฆฌํ๋ ๊ฒ
- ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์กฐ์ํ๊ฑฐ๋, ํฌ์ธํฐ์ ๊ฐ์ ์ฆ๊ฐ์ํค๊ฑฐ๋ ๊ฐ์์ํค๋ ๋ฑ์ ์์ ์ ์ํ
- ํน์ง
- ์ฃผ์ ์ฆ๊ฐ: ํฌ์ธํฐ์ ์ ์๋ฅผ ๋ํ๋ฉด, ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์๊ฐ ํด๋น ์๋ฃํ์ ํฌ๊ธฐ๋งํผ ์ฆ๊ฐ
- ex) int *p; p++๋ p๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์๋ฅผ 4๋ฐ์ดํธ(์ ์ํ์ ํฌ๊ธฐ) ์ฆ๊ฐ์ํจ๋ค.
- ํฌ์ธํฐ ๊ฐ์ ์ฐ์ฐ: ๋ ํฌ์ธํฐ ๊ฐ์ ๋บ์ ์ ํตํด ๋ ํฌ์ธํฐ ๊ฐ์ ๊ฑฐ๋ฆฌ(์์ ๊ฐ์)๋ฅผ ๊ตฌํจ
- ๋ฐฐ์ด์ ์์์ ์ ๊ทผ ์ ์ฃผ๋ก ์ฌ์ฉ
- ์ฃผ์ ์ฆ๊ฐ: ํฌ์ธํฐ์ ์ ์๋ฅผ ๋ํ๋ฉด, ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์๊ฐ ํด๋น ์๋ฃํ์ ํฌ๊ธฐ๋งํผ ์ฆ๊ฐ
3. ๋ฐฐ์ด๊ณผ ํฌ์ธํฐ
- ๋ฐฐ์ด ๋ณ์๋ ๋ฐฐ์ด์ด ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ ์ฃผ์๋ฅผ ๋ํ๋ด๋ฉฐ, ์ด๋ฅผ ํฌ์ธํฐ ๋ณ์์ ๋์ ๊ฐ๋ฅ
- ptr์ count ๋ฐฐ์ด์ ์์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ, *(ptr + 1)์ ๋ ๋ฒ์งธ ์์์ธ 200์ ๊ฐ๋ฆฌํจ๋ค.
#include <stdio.h>
int main() {
int count[6] = {100, 200, 300, 400, 500}; // ๋ฐฐ์ด ์ ์ธ
int *ptr; // ํฌ์ธํฐ ๋ณ์ ์ ์ธ
ptr = count; // ๋ฐฐ์ด์ ์์ ์ฃผ์๋ฅผ ํฌ์ธํฐ์ ๋์
printf("%d\n", *(ptr + 1)); // 200 ์ถ๋ ฅ
return 0;
}
- ๋ฐฐ์ด๋ณ์์ ํฌ์ธํฐ ์์
๋ฐฐ์ด ๋ณ์๋ ํฌ์ธํฐ ์์๋ก ์ทจ๊ธ๋๋ฉฐ, ๋ฐฐ์ด์ ์์ ์ฃผ์๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
count++; // ์ค๋ฅ: ๋ฐฐ์ด ๋ณ์๋ ์์์ด๋ฏ๋ก ์ฃผ์๋ฅผ ๋ณ๊ฒฝํ ์ ์์
- ํฌ์ธํฐ์ ๋ฌธ์์ด
๋ฌธ์์ด ์์: ๋ฌธ์์ด ์ฃผ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๋ฐํ
๋ฌธ์์ด ์์๋ ๋ฉ๋ชจ๋ฆฌ์ ํน์ ์ฃผ์๋ฅผ ๋ฐํํ๋ฉฐ, ๋ฌธ์์ด์ ํฌ์ธํฐ๋ก ์ ์ธํ ์ ์๋ค.(๋ฌธ์์ด ์์ ํฌ์ธํฐ)
#include <stdio.h>
int main() {
char *ptr = "ABC"; // ๋ฌธ์์ด ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
printf("%s\n", ptr); // ~ ์ถ๋ ฅ
return 0;
}
4. ํฌ์ธํฐ ์ ๋ฌ๊ณผ ๋ฐํ
์ธ์ ์ ๋ฌ ๋ฐฉ๋ฒ
- ๊ฐ์ ์ํ ํธ์ถ (Call by Value): ํจ์์ ์ธ์๋ฅผ ์ ๋ฌํ ๋, ์ธ์์ ๊ฐ์ด ๋ณต์ฌ๋์ด ์ ๋ฌ๋จ. ํจ์ ๋ด์์ ์ธ์์ ๊ฐ์ ๋ณ๊ฒฝํ๋๋ผ๋ ์๋์ ๊ฐ์๋ ์ํฅ์ ๋ฏธ์น์ง ์์
- ์ฐธ์กฐ์ ์ํ ํธ์ถ (Call by Reference): ํจ์์ ์ธ์๋ฅผ ์ ๋ฌํ ๋, ์ธ์์ ์ฃผ์๊ฐ ์ ๋ฌ. ํจ์ ๋ด์์ ์ธ์์ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ์๋์ ๊ฐ๋ ๋ณ๊ฒฝ๋๋ฉฐ, ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฐธ์กฐ์ ์ํ ํธ์ถ์ ๊ตฌํ
๋ฐฐ์ด์ ๋ฌ
- ๋ฐฐ์ด์ ํจ์์ ์ธ์๋ก ์ ๋ฌํด์ผ ํ ๊ฒฝ์ฐ ๋ฐฐ์ด์ ๋ฐฐ์ด ์ ์ฒด๊ฐ ๋ณต์ฌ๋์ด ์ ๋ฌ๋๋๊ฒ์ด ์๋๋ผ ๋ฐฐ์ด์ ์์์ฃผ์๋ง์ด ์ ๋ฌ๋๋ค.
- ๋ฐ๋ผ์ ๋ฐฐ์ด์ ๋ฐ์ ํจ์์ ๋งค๊ฐ๋ณ์๋ ํฌ์ธํฐ๋ก ์ ์ธ๋์ด์ผ ํ๋ค.
#include <stdio.h>
void modifyArray(int *arr, int size) {
for (int i = 0; i < size; i++) {
arr[i] += 1; // ๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ 1 ์ฆ๊ฐ
}
}
int main() {
int count[5] = {1, 2, 3, 4, 5};
modifyArray(count, 5); // ๋ฐฐ์ด์ ์์ ์ฃผ์ ์ ๋ฌ
for (int i = 0; i < 5; i++) {
printf("%d ", count[i]); // 2 3 4 5 6 ์ถ๋ ฅ
}
return 0;
}
ํฌ์ธํฐ ๋ฐํ
๋ถ๋ชจํจ์์ ํฌ์ธํฐ๋ฅผ ๋ฐํํ ์ ์๋ค. ์ด ๋ ํจ์์ํ์์ ํจ์๋ช ์์ ํฌ์ธํฐ ์๋ฃํ์ ์ ์ธํด์ผ ํ๋ค.
const ์ง์ ์
- const ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ์๋ฅผ ์์ํํ ์ ์๋ค. ์ด๋ ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ ๋ณ๊ฒฝํ์ง ๋ชปํ๊ฒ ํ๊ฑฐ๋ ํน์ ๋ณ์ ์ ์ฉ ํฌ์ธํฐ๋ฅผ ๋ง๋ค ๋ ์ ์ฉํ๋ค.
- ์ฝ๊ธฐ ์ ์ฉ ํฌ์ธํฐ: ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
#include <stdio.h>
void printValue(const int *ptr) {
// *ptr = 10; // ์ค๋ฅ: ์ฝ๊ธฐ ์ ์ฉ ํฌ์ธํฐ๋ก ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์
printf("%d\n", *ptr); // ๊ฐ ์ถ๋ ฅ
}
int main() {
int value = 5;
const int *ptr = &value; // ์ฝ๊ธฐ ์ ์ฉ ํฌ์ธํฐ
printValue(ptr);
return 0;
}
- ํน์ ๋ณ์์ ์ ์ฉ ํฌ์ธํฐ: ํฌ์ธํฐ ์์ ์ ๊ฐ(ํฌ์ธํฐ์ ์ ์ฅ๋ ์ฃผ์)์ ๋ณ๊ฒฝํ ์ ์๋ค.
#include <stdio.h>
void example() {
int value = 10;
int *const ptr = &value; // ํน์ ๋ณ์ ์ ์ฉ ํฌ์ธํฐ
// ptr = &anotherValue; // ์ค๋ฅ: ํฌ์ธํฐ ์ฃผ์๋ฅผ ๋ณ๊ฒฝํ ์ ์์
*ptr = 20; // ๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ
printf("%d\n", *ptr); // 20 ์ถ๋ ฅ
}
int main() {
example();
return 0;
}
- ์ฝ๊ธฐ ์ ์ฉ ํฌ์ธํฐ์ด๋ฉด์ ํน์ ๋ณ์ ์ ์ฉ ํฌ์ธํฐ: ๋ฐ๋์ ์ด๊ธฐํํด์ผ ํ๋ฉฐ, ์ดํฌ์ธํฐ๋ก๋ ๊ฐ๋ฆฌํค๋ ๋ณ์์ ๊ฐ๋ ๋ณ๊ฒฝํ ์ ์๊ณ ํฌ์ธํฐ ์์ ์ ๊ฐ(ํฌ์ธํฐ์์ ์ฅ๋ ์ฃผ์)๋ ๋ณ๊ฒฝํ ์ ์๋ค.
#include <stdio.h>
void example() {
int value = 10;
const int *const ptr = &value; // ์ฝ๊ธฐ ์ ์ฉ์ด๋ฉด์ ํน์ ๋ณ์ ์ ์ฉ ํฌ์ธํฐ
// *ptr = 20; // ์ค๋ฅ: ๊ฐ์ ๋ณ๊ฒฝํ ์ ์์
// ptr = &anotherValue; // ์ค๋ฅ: ํฌ์ธํฐ ์ฃผ์๋ฅผ ๋ณ๊ฒฝํ ์ ์์
printf("%d\n", *ptr); // 10 ์ถ๋ ฅ
}
int main() {
example();
return 0;
}
์ ๋ฆฌํ์๋ฉด
int *p; ํฌ์ธํฐ ๋ณ์. ์ฃผ์๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ, ๊ฐ ๋ณ๊ฒฝ O
const int *p; ์ฝ๊ธฐ ์ ์ฉ ํฌ์ธํฐ. ์ฃผ์๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ, ๊ฐ ๋ณ๊ฒฝ X
int* const p; ํน์ ๋ณ์ ์ ์ฉ ํฌ์ธํฐ. ์ฃผ์๊ฐ ๋ณ๊ฒฝ X, ๊ฐ ๋ณ๊ฒฝ O
const int* const p; ์ฝ๊ธฐ ์ ์ฉ& ํน์ ๋ณ์ ์ ์ฉ ํฌ์ธํฐ. ์ฃผ์๊ฐ ๋ณ๊ฒฝ X, ๊ฐ ๋ณ๊ฒฝ X
'๐ปโโ๏ธ์ ๊ณต๊ณต๋ถ > C์ธ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
10. ๋ฐฐ์ด๊ณผ ๋ฌธ์์ด (1) | 2024.10.21 |
---|---|
9. ๊ธฐ์ต ํด๋์ค (0) | 2024.10.14 |
ํฌ์ธํฐ (0) | 2024.09.10 |
8. ๋ฐฐ์ด (0) | 2024.09.10 |
7. ํจ์ (0) | 2024.09.10 |