์ด์ค ํฌ์ธํฐ ๋ณ์์ ์ดํด
https://better-tomorrow.tistory.com/entry/%ED%8F%AC%EC%9D%B8%ED%84%B0%EC%9D%98-%ED%8F%AC%EC%9D%B8%ED%84%B017-1-%ED%8F%AC%EC%9D%B8%ED%84%B0%EC%9D%98-%ED%8F%AC%EC%9D%B8%ED%84%B0%EC%97%90-%EB%8C%80%ED%95%9C-%EC%9D%B4%ED%95%B4
๋ฌธ์์ด์ ํ๋์ ์ฃผ์๊ฐ์ ์ง๋๋ค. (๋ฌธ์์ด์ ๋งค๊ฐ๋ณ์๋ก ๋๊ฒจ๋ฐ๋ ๋ฐฉ๋ฒ)
๋ฌธ์์ด์ด ํจ์์ ์ธ์๋ก ๋์ด๊ฐ๋ค๋ฉด ์ฃผ์๊ฐ ๋์ด๊ฐ๋ ๊ฒ์ ๋๋ค.
์ ๋ฌ๋ฐ๋ ์ชฝ์์๋ ํฌ์ธํฐ๋ณ์๊ฐ ์ค๋น๋์ด ์์ด์ผ ํ์ฃ .
- void aa(char x[])
- void aa(char x[20])
- void aa(char* x;)
์ ์ธ ๋ฌธ์ฅ์ ๊ฐ์ต๋๋ค.
*
๊ณผ &
ํ๊ธฐ๋ฒ*
๋ *
๋ค์์ ์ค๋ ๊ฒ์ด ๊ฐ๋ฆฌํค๋ ์ฃผ์
๋ฅผ ์๋ฏธํ๋ค. char *p
๋ ๊ทธ๋ ๋ค๋ฉด p
๋ผ๋ ๋ณ์๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์
๋ฅผ ์๋ฏธํ๋ ๊ฒ์ด๋ค.*p
= &addr
๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ์๋๋ ๊ฐ์ ํํ์
data[1] = 5;
*
(data +1) = 5;
*
(data +0) ์ *
(data)๋ก ์ค์ฌ์ ์ธ ์ ์๋ค.
*
p = 3;
p[0] = 3;
๋ฐฐ์ด๊ณผ ํฌ์ธํฐ ๋ณ์์์ ๊ด๊ณ์์ ๋ค์๊ณผ ๊ฐ์ ํํ์ ๋ชจ๋ ๋์ผํ ํํ์ด๋ผ๋ ๊ฒ์ ๊ธฐ์ตํด๋์!
count+i = ptr+i = &count[i] = &ptr[i]
: ๋ฐฐ์ด์ i+1 ๋ฒ์งธ ์์น์ ์ฃผ์(๋ฐฐ์ด์ ์์์ 0)*(count+i) = *(ptr+i) = count[i] = ptr[i]
: ๋ฐฐ์ด์ i+1๋ฒ์งธ ์์น์ ๋ฐ์ดํฐ
๋ฐฐ์ด๊ณผ ํฌ์ธํฐ๊ฐ ๋ณธ์ง์ ์ผ๋ก ๊ฐ๋ค๋ ๊ฒ์ ๋ฐฐ์ด์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๋ ์ธ๋ฐํ๊ฒ ์กฐ์ํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
์ด๋ ํฌ์ธํฐ์ ํ๋ณํ
์ ํตํด ๊ฐ๋ฅํ๋ค.
์์์ฃผ์ 1๋ฐ์ดํธ์ ์ ์ฅ๋ 0x78์ 0x22๋ก ๋ฐ๊พธ๊ณ ์ถ์๋ ์ด๋ป๊ฒ ํ ๊น?
int arr[0] = 0x22;
๋ฐฐ์ด์ ์ ์ธ๋ ์๋ฃํํ์ ๋ฐ๋ผ ์ฐ์ฐ๋๋ค. ๋ฐ๋ผ์ ์์ ๊ฐ์ ์ฝ๋๋ ์ฒซ ๋ฉ๋ชจ๋ฆฌ ๋ญํ ์ด, ๊ทธ๋ฌ๋๊น int์ ํด๋นํ๋ 4๋ฐ์ดํธ๋ฅผ 0x22๋ก ๋ฐ๊พผ๋ค๋ ๊ฒ์ ์๋ฏธํ๊ณ , 0x12345678์ด ์ ์ฅ๋์ด์๋ 4๋ฐ์ดํธ๋ 0x00000022 ๊ฐ ๋์ด๋ฒ๋ฆฐ๋ค.
*(char *)(arr)
= 0x22;
ํฌ์ธํฐ์ ํํ๋ฅผ 1๋ฐ์ดํธ์ธ char๋ก ๋ณํํ๊ณ (์ด๋ ์ผ์์ ์ด๋ค.) arr[0]์ ์ฃผ์๋ก ์ฃผ๋ฉด arr[0]์ ์ฒซ 1๋ฐ์ดํธ๋ฅผ 0x22๋ก ๋ณ๊ฒฝํ๊ฒ๋๋ค.
*p = (char *)&tips;
: 1๋ฐ์ดํธ ๋จ์๋ก ์ชผ๊ฐ์ ์ฃผ์๋ฅผ ๋ถ์ฌ.
sum = *(p+0) + *(p+1) + *(p+2) + *(p+3);
: ๊ฐ ๋ฐ์ดํธ๊ฐ์ ํฉ์ฐ(ํฌ์ธํฐ ํ๊ธฐ)
sum = p[0] + p[1]+ p[2] + p[3];
: ๊ฐ ๋ฐ์ดํธ๊ฐ์ ํฉ์ฐ(๋ฐฐ์ด ํ๊ธฐ)
char data;
char *p = &data;
//data ๋ณ์์ ์ฃผ์๋ฅผ p์ ์ ์ฅํจ
*p = 3;
//p๊ฐ ๊ฐ๋ฆฌํค๋ data ๋ณ์์ 3์ ๋์ ํจ
p[0] = 3;
//*p = 3; ๊ณผ ๊ฐ์
+)
while ๋ฌธ ์์ ์กฐ๊ฑด์ ๊ฐ์ด ๋์ฌ ๋ ๊น์ง!!(์ฃผ์๊ฐ์ด ๋ค์ด๊ฐ๋ฉด ๋ฌดํ๋ฃจํ)
์ ์ธ๋ ๋ฌธ์ ๋ฐฐ์ด์ null์ด ์๊ณ , ์ด๋ฅผ ์ถ๋ ฅํ๋ while๋ฌธ์์ while(**
ptr) ์ run time error ๋ฐ์ ( "" ๋ก ๊ธฐ์ฌํ๋ฉด ๊ฐ๋ฅ)
while(*
ptr) =while(*
ptr[0])
๐ฝ
๋๋ธ ํฌ์ธํฐ๋ฅผ ์ฐธ์กฐํ๊ฒ ๋๋ฉด ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ ํฌ์ธํฐ ๋ณ์ ์์ ์๋ ๊ฐ์ ์ป์ ์ ์์.
์ด์คํฌ์ธํฐ ์ฌ์ฉ ์ด์ :
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kails_&logNo=220165702409
main() ์์ ์ ๋ฌํ๋ ๋ณ์๊ฐ ํฌ์ธํฐ๋ณ์์๊ณ , ๊ทธ ํฌ์ธํฐ๋ณ์์ ์ฃผ์๊ฐ์ ๋๊ฒจ์ผ ํ๋ฏ๋ก, &refer๊ฐ ๋์ด์ผ ํ๋ ๊ฒ ๋ง์ผ๋ฉฐ, ๊ทธ์ ๋ง์ถฐ์ call_by_refer(int **
ref) ์ฒ๋ผ ์ด์คํฌ์ธํฐ๊ฐ ๋๋๊ฒ ๋ง๊ฒ ์ง์.
printf("sizeof((double *)ptr): %d \n", sizeof((double *)ptr) );
=> 4byte // ํฌ์ธํฐ๊ฐ ๊ฐ๋ฆฌํค๋ ์๋ฃํ ๋ณํ , ํฌ์ธํฐ์ ํฌ๊ธฐ๋ฅผ ๊ตฌํ์ผ๋ฏ๋ก ์๋ฃํ ์๊ด์์ด 4byte ์ถ๋ ฅ
printf("sizeof(*(double *)ptr): %d \n", sizeof(*(double *)ptr) );
=> 8byte // ํ ๋ณํ๋ ์๋ฃํ ํฌ๊ธฐ ํ์ธ
//pointer7.c
#include <stdio.h>
// ptr์ ๋ฌธ์์ด์ ์ถ๋ ฅ // ํฌ์ธํฐ ๋ฐฐ์ด์ `์ฃผ์๊ฐ`์ ์ ๋ฌํ๊ธฐ ์ํด ์ด์ค ํฌ์ธํฐ ์ฌ์ฉ
funcA(char** ptr) //3000๋ฒ์ง // funcA(char*ptr[]) // ๋๋ธ ํฌ์ธํฐ๋ฅผ ์ฐธ์กฐํ๊ฒ ๋๋ฉด ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ ํฌ์ธํฐ ๋ณ์ ์์ ์๋ ๊ฐ์ ์ป์ ์ ์์.
{
while (*ptr) //3000๋ฒ์ง๊ฐ ๊ฐ๋ฆฌํค๋ 7000
{
printf("%u, %u : %c \n", ptr, *ptr, **ptr); // 7000๋ฒ์ง์ ์
๋ ฅ๋ ๋จ์ผ ๋ฌธ์ ์ถ๋ ฅ
// printf("%u, %u : %s \n", ptr, *ptr, *ptr); // 7000๋ฒ์ง์ ์
๋ ฅ๋ ๋ฌธ์์ด ์ถ๋ ฅ
ptr++; // ๋ค์ ๋ฌธ์์ด ์์ ์ถ๋ ฅ // *(ptr++); // (*ptr)++
}
}
int main()
{
int num, * ip, ** mip; // ์ด์คํฌ์ธํฐ ๋ณ์
// ํ ๋ฒ๋ง ์ฐพ์๊ฐ๋ฉด ๋ฐ์ดํฐ -> ์ฑ๊ธํฌ์ธํฐ
// ํ ๋ฒ ์ฐพ์๊ฐ์ ๋ ์ฃผ์, ๋ ๋ฒ ์ฐพ์๊ฐ์ ๋ ๋ฐ์ดํฐ -> ์ด์คํฌ์ธํฐ
printf("%d, %d, %d \n", sizeof(num), sizeof(ip), sizeof(mip));
ip = #
mip = &ip;
**mip = 350;
printf("%d, %d, %d \n", num, *ip, **mip);
char* ptr[8] = { "kingdom test",
"Advance C programming",
"C++ programming",
"one two three",
"multi campus",
"seoul ์์ธ์ ๊ฐ๋จ๊ตฌ ์์ฌ๋ 100๋ฒ์ง",
"busan ๋ถ์ฐ์ ํด์ด๋๊ตฌ ํด์ด๋๋ ๋ฐ๋ค 2 ๋ฒ์ง",
NULL };
funcA(ptr);
return 0;
}
// ์ด์คํฌ์ธํฐ ์ฌ์ฉ ์ด์ :
// ํฌ์ธํฐ ๋ฐฐ์ด(char* ptr[])์ ์ค์ธ์๋ก ์ ๋ฌํ๊ธฐ ์ํด์๋, ๋งค๊ฐ๋ณ์๋ฅผ ๋๋ธ ํฌ์ธํฐ๋ก ์ ์ธ ํ (char** ptr)
// main() ์์ ์ ๋ฌํ๋ ๋ณ์๊ฐ ํฌ์ธํฐ๋ณ์์๊ณ , ๊ทธ ํฌ์ธํฐ๋ณ์์ ์ฃผ์๊ฐ์ ๋๊ฒจ์ผ ํ๋ฏ๋ก, &refer๊ฐ ๋์ด์ผ ํ๋ ๊ฒ ๋ง์ผ๋ฉฐ, ๊ทธ์ ๋ง์ถฐ์ call_by_refer(int **ref) ์ฒ๋ผ ์ด์คํฌ์ธํฐ๊ฐ ๋๋๊ฒ ๋ง๊ฒ ์ง์.
//void_pointer1.c
#include <stdio.h>
int main()
{
char ch = 'A';
int num = 100;
double dnum = 5.6;
void* ptr; //voidํ ํฌ์ธํฐ
printf("ptr sizeof : %d \n", sizeof(ptr));
ptr = &ch;
printf("%c \n", *(char*)ptr); // 'A' // voidํ ํฌ์ธํฐ๋ ๋ฐ๋ก ํฌ์ธํฐ ์ฐ์ฐ ๋ถ๊ฐ๋ฅ
ptr = #
printf("%d \n", *(int*)ptr); // 'A' // voidํ ํฌ์ธํฐ๋ ๋ฐ๋ก ํฌ์ธํฐ ์ฐ์ฐ ๋ถ๊ฐ๋ฅ
ptr = &dnum;
printf("%.3lf \n", *(double*)ptr); // 'A' // voidํ ํฌ์ธํฐ๋ ๋ฐ๋ก ํฌ์ธํฐ ์ฐ์ฐ ๋ถ๊ฐ๋ฅ
return 0;
}
//void ํ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ
//ํ๋ก๊ทธ๋จ ์คํ์ค ๋ค์ํ ํ์
์ ์ฃผ์๊ฐ์ ๋ฐ์ ํฌ์ธํฐ๋ฅผ ์ ์ธํด์ค ๋
// dataSwap.c
#include <stdio.h>
void swap(void* sour, void* targ, int size);
int main()
{
short int x = 100, y = 200;
int n1 = 500, n2 = 900;
double d1 = 1.1, d2 = 5.9;
char names[2][20] = { "kim ??", "lee ??" };
// swap(&x, &y); // short int *x = &x , ์ฃผ์๊ฐ์ ๋๊ฒจ์ฃผ์ง ์์ผ๋ฉด swap ๋ด ๋ณ๊ฒฝ๋ ๊ฐ์ ์ ๋ฌ๋์ง ์์(์ง์ญ ๋ณ์๋ก ์๋ฉธ)
// swap2, swap3, ,,, ํจ์ 4๋ฒ ํธ์ถ ํ => void๋ก ํจ์ ํ
ํ๋ฆฟ ๋ง๋ค๊ธฐ!!
swap(&x, &y, sizeof(x));
swap(&n1, &n2, sizeof(int));
swap(&d1, &d2, sizeof(double));
swap(names[0], names[1], sizeof(names[0]));
printf("x : %d, y: %d \n", x, y);
printf("n1 : %d, n2: %d \n", n1, n2);
printf("d1 : %lf, d2: %lf \n", d1, d2);
printf("%s, %s \n", names[0], names[1]);
return 0;
}
// Generic Function (์๋ฃํ์ ๊ตฌ์ ๋ฐ์ง ์๊ณ ํ๋์ ๋ก์ง์ผ๋ก ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ํจ์)
void swap(void* sour, void* targ, int size) // ๋งค๊ฐ๋ณ์๋ก ์ฃผ์๊ฐ์ ์ ๋ฌ
{
char tmp, i; // charํ i๋ ์์ ์ ์๋ฅผ ๋ด์ ์ ์์
for(i=0;i<size;i++)
{
tmp = *((char*)sour+i); // voidํ ํฌ์ธํฐ ๋ณ์์์ ๊ฐ์ ์ฌ์ฉ์ ๋ฐ๋์ ์บ์คํธ ์ฐ์ฐ์๋ฅผ ํตํด ํฌ์ธํฐ ์๋ฃํ ๋ช
์
*((char*)sour + i) = *((char*)targ+i);
*((char*)targ + i) = tmp;
}
}
cf. ์ผ๋ฐํํ์ง ์๋ ๊ฒฝ์ฐ
//function_pointer1.c
#include <stdio.h>
/*
ํจ์ ํฌ์ธํฐ: ํฌ์ธํฐ ๋ณ์๊ฐ ํจ์์ ์ฃผ์๋ฅผ ์ ์ฅํ์ฌ,
ํฌ์ธํฐ ๋ณ์๋ก ํจ์๋ฅผ ํธ์ถํ๊ฒ ํ๋ค.
ํ์: ์๋ฃํ(*๋ณ์๋ช
)(์ธ์๋ฆฌ์คํธ);
*/
void myFunc(char* ptr); // ํจ์ ํฌ์ธํฐ ์ ์ธ๋ฌธ ๊ธฐ์ฌ ํ (์ ์์ ๋์์ ์ ์ธํ๋ ๊ฒฝ์ฐ์๋ ์๋ต ๊ฐ๋ฅ)
int main()
{
void(*fPtr)(char* ); //ํจ์ ํฌ์ธํฐ ๋ณ์ ์ ์ธ [ ์๋ฃํ(*๋ณ์๋ช
)(์ธ์๋ฆฌ์คํธ); ]
// cf. int(*ptr)[3]; // ๋ฐฐ์ด ํฌ์ธํฐ ๋ณ์ ์ ์ธ => 2์ฐจ์ ๋ฐฐ์ด์ ์ฃผ์๋ฅผ ์ ์ฅ
printf("fPtr sizeof : %d \n", sizeof(fPtr)); // ์ฃผ์๊ฐ์ 1๊ฐ ๋ณด๊ด => ํจ์์ ์ฃผ์๋ฅผ ์ ์ฅํ๊ณ ์์์ ์ปดํ์ผ๋ฌ์๊ฒ ์๋ฆผ => return value ๊ฐ void ํ์
, char * ๋ฐ์๋ค์ด๋ ํจ์
fPtr = myFunc; // ํจ์ ์ฃผ์ ํ ๋น(ํจ์๋ช
์ ํจ์์ ์์์ฃผ์์ด๋ค)
// myFunc("this is a test."); //๋ฌธ์์ด ์์๋ ๋ฌธ์์ด์ ์ ์ฅ๋ ์ฃผ์๊ฐ์ ์ง๋
(*fPtr)("multi campus"); // ํจ์ ํธ์ถ
fPtr("Advanced C Programming"); // ํจ์ ํธ์ถ
(*fPtr)("Advanced C Programming"); // ํจ์ ํธ์ถ
return 0;
}
void myFunc(char *ptr)
{
printf("myFunc() : %p, %s \n",ptr, ptr);
}
#include <stdio.h>
int add(int x, int y);
int sub(int x, int y);
int mul(int x, int y);
int div(int x, int y);
int main()
{
int (*ptrArr[4])(int x, int y)={ add, sub, mul, div }; // ํจ์ ํฌ์ธํฐ ๋ฐฐ์ด ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ
//int (*ptrArr)(int , int ); // ptrArr๋ ํจ์ ํฌ์ธํฐ ๋ณ์, ํจ์์ ์ฃผ์๊ฐ์ 1๊ฐ ์ ์ฅ => 4byte ํ ๋น
//int (*ptrArr[4])(int, int); //ptrArr๋ ํจ์ ํฌ์ธํฐ ๋ฐฐ์ด, ํจ์์ ์ฃผ์๊ฐ์ 1๊ฐ ์ ์ฅ => 16byte ํ ๋น
int menu_no, num1, num2, result;
char op[4] = { '+', '-', '*', '/' };
char tmp[10];
// ptrArr[0] = add;
while(1)
{
printf("\n1. add\n");
printf("2. subtract\n");
printf("3. multiply\n");
printf("4. divide\n");
printf("5. end\n");
do {
printf("\nSelect(1-5) --> ");
scanf("%d%*c",&menu_no); //1, 3, abc
//gets(tmp); //1, abc
// menu_no = atoi(tmp);
} while(menu_no<0 || menu_no >5);
if(menu_no==5)
break;
printf("Input the two numbers --> ");
scanf("%d %d%*c",&num1, &num2); //100 30[enter]
// ํจ์ ํฌ์ธํฐ ๋ฐฐ์ด๋ก
result = (*ptrArr[menu_no - 1])(num1, num2); // 1=> ๋ฐฐ์ด[1]์ ๋ง์
ํจ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ์ ์ฅ => ๋ง์
ํจ์ ๋ด num1, num2 ๋์
์ํ
printf(" %d %c %d = %d \n", num1, op[menu_no-1], num2, result);
}
return 0;
}
int add(int x, int y)
{
return x+y;
}
int sub(int x, int y)
{
return x-y;
}
int mul(int x, int y)
{
return x*y;
}
int div(int x, int y)
{
if(y==0)
{
printf("can not divide by 0\n");
return -1;
}
return x/y;
}
https://reakwon.tistory.com/20
์คํ์์ญ
- ์ฐ๋ฆฌ๋ ์ด์ ๊ป ์คํ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด ์์ต๋๋ค. ์ปดํ์ผ ์์ ์ ๊ฒฐ์ ๋๋ ์์ญ์ ๋๋ค.
ํ ์์ญ
- ์ด ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ ์คํ์์ (Run Time)์ ๊ฒฐ์ ๋ฉ๋๋ค. ํ๋ก๊ทธ๋๋จธ์ ์ํด์์. ์ด ์์ญ์ ํ์์ญ์ด๋ผ๊ณ ํฉ๋๋ค.
void *malloc(size_t size)
void free(void *ptr)
ํ์ง๋ง ๊ทธ๋ฅ ๋ฉ๋ชจ๋ฆฌ๋ง ํ ๋นํ๊ณ ํด์ ํ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋์ถ๋ฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด์ ์ฐ์ง ์์ ๊ฒฝ์ฐ(๊ฑฐ์ ํจ์ ๋ฐํ ์ง์ )์ freeํจ์๋ฅผ ์จ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํด์ผํฉ๋๋ค.
๐ ํ ๋น๋ ๊ณต๊ฐ์ ์ผ๋ถ๋ง์ ํด์ ํ ์ ์์.
๐ free ๋ heap segment ์์๋ง ํด์ ๊ถํ์ ๊ฐ์ง
๐ ์ฆ, free()ํจ์์ ์ธ์๋ malloc(), calloc(), realloc() ํธ์ถ์์ ๋ฐํ๋ฐ์ ๊ฐ, ์ฆ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ฌ์ผ ํจ. (๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ๋ ํด์ ๋์์ด ์๋)
//malloc1.c
#include <stdio.h>
int main()
{
char* ptr;
ptr = (char*)malloc(100);
if (ptr == NULL)
{
perror("Error : ");
exit(1);
}
printf("input string? ");
gets(ptr); //campus => ์
๋ ฅ๋ ๋ฌธ์์ด์ด ๊ดํธ์์ ์ฃผ์(ptr)์ ๋์
, heap segment ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๋จ
printf("ptr: %p, %s \n", ptr, ptr);
free(ptr); // ๋ ์ด์ ์ ๊ทผ ๋ถ๊ฐํ ์ฃผ์๊ฐ์ผ๋ก ๋ฐ๋ (null pointer)
// free(ptr);
printf("ptr: %p, %s \n", ptr, ptr);
return 0;
}
๐ฝ free(ptr); ์คํ ์ ์ถ๋ ฅ
๐ฝ free(ptr); ์คํ ํ ์ถ๋ ฅ
free(ptr);
: ๋ ์ด์ ์ ๊ทผ ๋ถ๊ฐํ ์ฃผ์๊ฐ์ผ๋ก ๋ฐ๋ (null pointer)
๋ฉ๋ชจ๋ฆฌ ๋ฆญ(Memory Leak)
void
*
calloc(size_t n, size_t size)
calloc์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๋ถ 0์ผ๋ก ์ด๊ธฐํํฉ๋๋ค.
void
*
realloc(void *memblock, size_t size)
๐ฝ
ptr = malloc(100);
ptr = calloc(20, sizeof(double));
ptr = realloc(ptr, 500);
//enum_pointerEx.c
#include <stdio.h>
#include <string.h>
typedef enum Season
{
SPRING,
SUMMER,
FALL,
WINTER,
} SEASON;
GetSeason(int season)
{
switch (season)
{
case 0:
return("SPRING");
case 1:
return("SUMMER");
case 2:
return("FALL");
case 3:
return("WINTER");
default:
break;
}
}
int main()
{
char* ptr;
enum Season season = SPRING; // 1
ptr = GetSeason(season);
printf("์ ํํ ๊ณ์ : %s \n", ptr);
return 0;
}
//enum_pointerEx.c
#include <stdio.h>
#include <string.h>
typedef enum Season
{
SPRING=1,
SUMMER,
FALL,
WINTER,
} SEASON;
GetSeason(int season)
{
switch (season)
{
case 1:
return("SPRING");
case 2:
return("SUMMER");
case 3:
return("FALL");
case 4:
return("WINTER");
default:
break;
}
}
int main()
{
char* ptr;
enum Season season = SPRING; // 1
ptr = GetSeason(season);
printf("์ ํํ ๊ณ์ : %s \n", ptr);
return 0;
}
//enum_pointerEx.c
#include <stdio.h>
#include <string.h>
typedef enum Season
{
SPRING=1,
SUMMER,
FALL,
WINTER,
} SEASON;
GetSeason(int season)
{
switch (season)
{
case SPRING:
return("SPRING");
case SUMMER:
return("SUMMER");
case FALL:
return("FALL");
case WINTER:
return("WINTER");
default:
break;
}
}
int main()
{
char* ptr;
enum Season season = SPRING; // 1
ptr = GetSeason(season);
printf("์ ํํ ๊ณ์ : %s \n", ptr);
return 0;
}
// double_pointerEX.c
#include <stdio.h>
void funcA(char** ptr) // ํฌ์ธํฐ ๋ฐฐ์ด์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ, ์ด์ค ํฌ์ธํฐ ์ฌ์ฉ ํ
{
int i;
while (*ptr)
{
printf("%u : ", ptr);
for (i = 0; i <= ptr[i][0]; i++) // for (i = 0; *(*ptr + i); i++)
{
printf("%c", ptr[i][0]);
}
printf(" // length : %d \n", i);
ptr++;
}
// *(*ptr + i)= > * ptr: ํ์ ์์ ์ฃผ์ = > * ptr + i : ๋ค์ ํ ํธ์ถ = > * (*ptr + i) ํ ๋น๋ ํ์ ๋์
๋ ๊ฐ ์ถ๋ ฅ // ptr[i][0]
}
int main()
{
char* ptr[] = { "kingdom test",
"Advance C programming",
"C++ programming",
"one two three",
"multi campus",
"seoul ์์ธ์ ๊ฐ๋จ๊ตฌ ์์ฌ๋ 100๋ฒ์ง",
"busan ๋ถ์ฐ์ ํด์ด๋๊ตฌ ํด์ด๋๋ ๋ฐ๋ค 2 ๋ฒ์ง",
NULL };
funcA(ptr);
return 0;
}