2์ฐจ์ ๋ฐฐ์ด๊ณผ ํฌ์ธํฐ
int m[3][3];
- ๋ฐฐ์ด ์ด๋ฆ m์ &m[0][0]
- m[0]๋ 1ํ์ ์์ ์ฃผ์
- m[1]๋ 2ํ์ ์์ ์ฃผ์
...
2์ฐจ์ ๋ฐฐ์ด์์ m์ 1์ ๋ํ๊ฑฐ๋ ๋นผ๋ ๊ฒ์ ์๋ฏธ๋ ๋ค์ ์ฌ์ง๊ณผ ๊ฐ๋ค.
#include <stdio.h>
int main(void)
{
int m[3][3] = { {10, 20, 30}, {40, 50, 60}, {70, 80, 90} };
printf("m = %p\n", (void *)m);
printf("m[0] = %p\n", (void *)m[0]);
printf("m[1] = %p\n", (void *)m[1]);
printf("m[2] = %p\n", (void *)m[2]);
printf("&m[0][0] = %p\n", (void *)&m[0][0]);
printf("&m[1][0] = %p\n", (void *)&m[1][0]);
printf("&m[2][0] = %p\n", (void *)&m[2][0]);
return 0;
}
//๊ฒฐ๊ณผ๊ฐ
m = 1245020
m[0] = 1245020
m[1] = 1245032
m[2] = 1245044
&m[0][0] = 1245020
&m[1][0] = 1245032
&m[2][0] = 1245044
const ํฌ์ธํฐ
- (constant)์ ์ฝ์์ด๋ฏ๋ก, ์์๋ฅผ ์๋ฏธํ๊ณ , ๋ณํ์ง ์๋ ๊ฐ์ ์๋ฏธํ๋ค.
- ํฌ์ธํฐ ์์ฒด์ ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋์ง ์์
- ์๋ธ ํจ์๋ฅผ ๋ถ๋ฌ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ๋ ๋ฑ ์ฝ๋์ ์์ ์ฑ์ ๋์ด๊ณ , ์๋ํ์ง ์์ ๋ณ๊ฒฝ์ ๋ฐฉ์งํ ์ ์๋ค
- const๋ฅผ ๋ถ์ด๋ ์์น์ ๋ฐ๋ผ์ ์๋ฏธ๊ฐ ๋ฌ๋ผ์ง๋ค.
volatile ํฌ์ธํฐ
- ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ์ค๋ ๋๊ฐ ๊ฐ์ ํญ์ ๋ณ๊ฒฝํ ์ ์์ผ๋ ๊ฐ์ ์ฌ์ฉํ ๋๋ง๋ค ๋ค์ ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ์ผ๋ผ๋ ๊ฒ์ ์๋ฏธ
- p(ํฌ์ธํฐ)๊ฐ ๊ฐ๋ฆฌํค๋ ๋ด์ฉ์ด ์์๋ก ๋ณ๊ฒฝ๋๋ฏ๋ก ์ฌ์ฉํ ๋๋ง๋ค ๋ค์ ๋ก๋ํ๋ผ๋ ์๋ฏธ์ด๋ค.
- ์ค๊ฐ์ ์ฝ๋์์ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ ๋ด์ฉ์ ๊ฑด๋๋ฐ๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๊ฐ์ ๊ฐ์ ธ์ ์ฌ์ฉํจ
void ํฌ์ธํฐ
- ๋ชจ๋ ๋ฐ์ดํฐ ํ์ ์ ๊ฐ๋ฆฌํฌ ์ ์๋, ์ฃผ์๋ฅผ ๋ด๋ ๋ณ์
- ์์ํ๊ฒ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ง ๊ฐ์ง๊ณ ์๋ ํฌ์ธํฐ
- ํ์ ์ด ์๋ ํฌ์ธํฐ
- ์ด๋ค ๋ฐ์ดํฐ ํ์ ์ด๋ ๊ฐ๋ฆฌํฌ ์ ์์ง๋ง, ๊ฐ๋ฆฌํค๊ณ ์๋ ๋ฐ์ดํฐ์ ํ์ ์ ๋ํ ์ ๋ณด๊ฐ ์๋ค.
- ๊ฐ๋ฆฌํค๋ ๋์๋ฌผ์ ์์ง ์ ํด์ง์ง ์์
(์) void *vp;
- void ํฌ์ธํฐ๋ ๋ฐ์ดํฐ ํ์ ์ ๊ตฌ์ ๋ฐ์ง ์๊ณ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ ์ฅํ ์ ์์ด, ํจ์์์ ๋ค์ํ ํ์ ์ ํฌ์ธํฐ๋ฅผ ๋ฐ์ ์ ์๋ ์ ์ฉํ ๋ฐฉ๋ฒ
- void ํฌ์ธํฐ๋ ๋ฐ์ดํฐ์ ํ์ ์ ์ ์ ์๊ธฐ ๋๋ฌธ์, ์ง์ ์ ์ธ ์ฐ์ฐ(์: ์ญ์ฐธ์กฐ, ํฌ์ธํฐ ์ฐ์ฐ)์ ํ ์ ์๋ค.
- ์ง์ ์ ์ธ ํฌ์ธํฐ ์ฐ์ฐ์ ๋ถ๊ฐ๋ฅํ๋ฏ๋ก, void ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ์ ์ ํ ํ์ ์ผ๋ก ๋ณํํด์ผ ํจ
- void ํฌ์ธํฐ๋ฅผ ํ์ฉํ๋ฉด, ํ์ ์ ๋ ๋ฆฝ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ผ๋ฉฐ, ์๋ฅผ ๋ค์ด ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ๋ด์ฉ์ ์ฒ๋ฆฌํ๋ ํจ์์์ ์ ์ฉํ๋ค
๋ค์๊ณผ ๊ฐ์ ์ฐ์ฐ์ ๋ชจ๋ ์ค๋ฅ์ด๋ค
- *vp;
- *(int *)vp; // voidํ ํฌ์ธํฐ๋ฅผ intํ ํฌ์ธํฐ๋ก ๋ณํํ๋ค.
- vp++;
- vp--;
- ์ญ์ฐธ์กฐ: *vp์ ๊ฐ์ ์ฐ์ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์. void ํฌ์ธํฐ๋ ๋ฐ์ดํฐ ํ์ ์ด ๋ช ์๋์ด ์์ง ์๊ธฐ ๋๋ฌธ์, ์ปดํ์ผ๋ฌ๊ฐ ํฌ์ธํฐ ์ฐ์ฐ์ ์ดํดํ ์ ์๋ค.
- ํฌ์ธํฐ ์ฐ์ฐ: vp++๋ vp--์ ๊ฐ์ ํฌ์ธํฐ ์ฐ์ฐ๋ ์ค๋ฅ๊ฐ ๋ฐ์. ํฌ์ธํฐ ์ฐ์ฐ์ ์ํํ๋ ค๋ฉด ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ์์์ผ ํ๋๋ฐ, void ํฌ์ธํฐ๋ ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ์ ์ ์๊ธฐ ๋๋ฌธ
- ํ ๋ณํ: *(int *)vp์ ๊ฐ์ด void ํฌ์ธํฐ๋ฅผ ๋ค๋ฅธ ํฌ์ธํฐ ํ์ ์ผ๋ก ๋ณํํ๋ ๊ฒ์ ๊ฐ๋ฅํ์ง๋ง, ์ด๋ฅผ ํตํด ์ง์ ์ ์ธ ์ฐ์ฐ์ ํ๊ธฐ ์ ์ ๋ฐ๋์ ์ฌ๋ฐ๋ฅธ ํ์ ์ผ๋ก ๋ณํํด์ผ ํ๋ค.
void ํฌ์ธํฐ๋ ์ด๋์ ์ฌ์ฉํ๋๊ฐ?
- void ํฌ์ธํฐ๋ฅผ ์ด์ฉํ๋ฉด ์ด๋ค ํ์ ์ ํฌ์ธํฐ๋ ๋ฐ์ ์ ์๋ ํจ์๋ฅผ ์์ฑํ ์ ์๋ค.
- ์๋ฅผ ๋ค์ด์ ์ ๋ฌ๋ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ 0์ผ๋ก ์ฑ์ฐ๋ ํจ์๋ฅผ ์์ฑํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
void memzero(void *ptr, size_t len)
{
for (; len > 0; len--) {
*(char *)ptr = 0;
}
}
main() ํจ์
main() ํจ์์ ์ธ์
์ง๊ธ๊น์ง์ main()ํจ์์ ํํ
int main(void)
{
..
}
์ธ๋ถ๋ก๋ถํฐ ์ ๋ ฅ์ ๋ฐ๋ main()ํจ์ ํํ
int main(int argc, char *argv[])
{
...
}
#include <stdio.h>
int main(int argc, char *argv[])
{
int = i;
for(i = 0 ; i < argc ; i++)
printf("๋ช
๋ น์ด ๋ผ์ธ์์ %d๋ฒ์งธ ๋ฌธ์์ด = %s\n", i, argv[i]);
return 0;
}
์์
- mile์ km๋ก ๋ฐ๊พธ๋ ํ๋ก๊ทธ๋จ
mile = atof(argv[1]);
- atof ํจ์๋ ๋ฌธ์์ด์ ์ค์๋ก ๋ณํํ๋ ํจ์
- ์ฆ, ๋ช ๋ นํ ์ธ์๋ก ๋ฐ์ ๋ฌธ์์ด(argv[1])์ double ํ์ ์ ์ค์๋ก ๋ณํํ์ฌ mile ๋ณ์์ ์ ์ฅ
km = 1.609 * mile;
- ์ด ์ค์ mile ๋ณ์์ ์ ์ฅ๋ ๋ง์ผ ๊ฐ์ ํฌ๋ก๋ฏธํฐ๋ก ๋ณํ
- 1.609๋ 1๋ง์ผ์ด ์ฝ 1.609ํฌ๋ก๋ฏธํฐ์ ํด๋นํ๋ค๋ ์์ ๊ฐ
- ๋ฐ๋ผ์ mile ๊ฐ์ 1.609๋ก ๊ณฑํ์ฌ km ๋ณ์์ ์ ์ฅํจ์ผ๋ก์จ ํฌ๋ก๋ฏธํฐ ๋จ์๋ก ๋ณํ๋ ๊ฐ์ ์ป๋๋ค
qsort() ํจ์
- qsort()๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๋ฐฐ์ด์ ์ ๋ ฌํ๋๋ฐ ์ฌ์ฉ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์
- base : ์ ๋ ฌ๋ ๋ฐฐ์ด์ ์ฃผ์
- nitems : ์์๋ค์ ๊ฐ์(๋ฐฐ์ด์ ํฌ๊ธฐ)
- size : ๊ฐ ์์๋ค์ ํฌ๊ธฐ(๋ฐ์ดํธ ๋จ์)
- compar : 2๊ฐ์ ์์๋ฅผ ๋น๊ตํ๋ ํจ์
qsort()๋ฅผ ์ฌ์ฉํ ๋๋ compar ํจ์์ ํ์์ ๋ฐ๋์ ๋ฐ๋ผ์ผ ํ๋ฉฐ, const void * ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์์๋ฅผ ๋น๊ตํ๊ณ ์์๋ฅผ ๊ฒฐ์ ํ๋ ํจ์์ฌ์ผ ํ๋ค.
qsort() ํจ์์์ compar ํจ์๋ ๋ ๊ฐ์ ๋ฐฐ์ด ์์๋ฅผ ๋น๊ตํ์ฌ ์ ๋ ฌ์ ์์๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐ ํ์์ ์ธ ์ญํ ์ ํจ
- ์ ๋ ฌ ๊ธฐ์ค ๊ฒฐ์ : qsort()๋ ๋ฐฐ์ด์ ์์๋ค์ ์ ๋ ฌํ๊ธฐ ์ํด ๋ ์์๋ฅผ ๋น๊ตํ์ฌ ๊ทธ ์๋์ ์์๋ฅผ ๊ฒฐ์ ํจ. ์ด ๋น๊ต ์์ ์ ์ํํ๋ ๊ฒ์ด compar ํจ์์ ์ฃผ๋ ์ญํ
์์
#include <stdio.h>
#include <stdlib.h> //qsort()์ ๊ฐ์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ค์ ์ฌ์ฉํ๊ธฐ ์ํด ํฌํจ
int values[] = { 98, 23, 99, 37, 16 }; //์ ์ํ ๋ฐฐ์ด์ ์ ์ธํ๊ณ ์ด๊ธฐํ
int compare(const void *a, const void *b)
{
return (*(int*)a - *(int*)b);
}
int main()
{
int n;
qsort(values, 5, sizeof(int), compare);
printf("์ ๋ ฌํ ํ ๋ฐฐ์ด: ");
for (n = 0 ; n < 5 ; n++)
printf("%d", values[n]);
printf("\n");
return 0;
}
(int*)a์ (int*)b๋ ์ด ํฌ์ธํฐ๋ค์ int* ํ์ ์ผ๋ก ๋ณํํ์ฌ ์ค์ ์ ์ ๊ฐ์ ์ ๊ทผํจ
*(int*)a - *(int*)b๋ ๋ ์ ์๋ฅผ ๋น๊ตํ์ฌ ๊ทธ ์ฐจ์ด๋ฅผ ๋ฐํ. ์ด ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ๋ ์์์ ์์๋ฅผ ๊ฒฐ์ ํ๋ค.
values: ์ ๋ ฌํ ๋ฐฐ์ด์ ์์ ์ฃผ์
5: ๋ฐฐ์ด์ ์์ ๊ฐ์
sizeof(int): ๊ฐ ๋ฐฐ์ด ์์์ ํฌ๊ธฐ(๋ฐ์ดํธ ๋จ์)
compare: ์์๋ฅผ ๋น๊ตํ๋ ํจ์