๐ก
๋ฐ๋ฐฐ์จ 9.10 ~ ๋ณธ๋ฌธ
9.10 ํผ๋ณด๋์น ์์ ์ ์ฌ๊ท ํธ์ถ์ ์ฅ๋จ์
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int fibonacci(int number);
int main()
{
for (int count = 1; count < 13; ++count)
printf("%d ", fibonacci(count));
return 0;
}
int fibonacci(int number)
{
if (number == 1 || number == 2)
return 1;
return fibonacci(number-1) + fibonacci(number-2);
}
์ฌ๊ทํธ์ถ์ ์ฌ์ฉํ๋ฉด ๊ตฌํ์ ๊ฐ๊ฒฐํ๊ฒ ํ ์ ์๋ค.
๋์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํ๊ณ , ๊ณ์ฐ์ด ์ค๋ณต๋๋ค
9.11 ํค๋ ํ์ผ ๋ง๋๋ ๋ฐฉ๋ฒ
ํ๋ก์ ํธ๋ช ์ ๋ง์ฐ์ค ์ฐํด๋ฆญ -> Add -> Nw Item -> Header File
ํค๋ํ์ผ์๋ ํ๋กํ ํ์ ๋ง ์ ๊ณ , ์์ค ํ์ผ์ definition๋ง ์ ์ด์ ๋ถ๋ฆฌํ๋ฉด ๋ ๊ฐ๊ฒฐํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค
์ด๋ ํค๋ํ์ผ๊ณผ ์์คํ์ผ์ ์ด๋ฆ์ ๊ฐ๊ฒ ๋ง๋ค์ด์ค์ผ ํ๋ค.
๋ง๋๋ ํค๋ํ์ผ์ <stdio.h>๋ฑ ๋ค๋ฅธ ํค๋ํ์ผ์ include ํ๊ณ ์์คํ์ผ์์ ๋ง๋ ํค๋ํ์ผ์ ์ ์ธํ๋ฉด
<stdio.h>๋ฅผ ์ ์ธํ์ง ์์๋ ์ด ์์ ํจ์๋ค์ ์ฌ์ฉํ ์ ์๋ค.
9.12 ํฌ์ธํฐ์ ์๋ ์๋ฆฌ
int *a_ptr = &a;
ํฌ์ธํฐ ๋ณ์์ ์ ์ฅ๋์ด ์๋ ๊ฐ์ ๋ค๋ฅธ ๋ณ์์ ์ฃผ์์ด๋ค.
๋ฐ๋ผ์ ์ง์ ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ๋ณด๋ค๋
๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด๋ ๊ทธ ๊ณต๊ฐ์ ์ ์ฅ๋์ด ์๋ ๋ฐ์ดํฐ(๋๋ ๊ฐ์ฒด Object)๋ฅผ
(๊ฐ์ ์ ์ผ๋ก) ๊ฐ๋ฆฌํค๋(pointing) ์ญํ ์ ํ๋ค.
9.13 ํฌ์ธํฐ์ ๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ ๋ฐฉ๋ฒ
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
int a, b;
a = 123;
int *a_ptr; // * : asterisk
a_ptr = &a; // & : address-of operator
printf("%d %d %p\n", a, *a_ptr, a_ptr); // 123 123 a์ ์ฃผ์๊ฐ
*a_ptr = 456; // * : re-direction or de-referencing
printf("%d %d %p\n", a, *a_ptr, a_ptr); // 456 456 a์ ์ฃผ์๊ฐ
// b = a_ptr; // warning ์ฃผ์๊ฐ์ intํ ๋ณ์ b์ ๋์
b = *a_ptr;
printf("%d\n", b); // 456
*a_ptr = 789;
printf("%d\n", b); // 456
printf("%d %d %p\n", a, *a_ptr, a_ptr); // 789 789 a์ ์ฃผ์๊ฐ
b = 12;
printf("%d\n", b); // 12
printf("%d %d %p\n", a, *a_ptr, a_ptr); // 789 789 a์ ์ฃผ์๊ฐ
a = 1004;
printf("%d %d %p\n", a, *a_ptr, a_ptr); // 1004 1004 a์ ์ฃผ์๊ฐ
return 0;
}
9.14 ํฌ์ธํฐ์ ์ฝ๋ฉ ์คํ์ผ
int* a;
int* b;
ํ ์ค๋ก ์ฐ์ง ๋ง๊ณ , ํ ๋ณ์์ ํ๋์ฉ ์ชผ๊ฐ์ ์ฐ๋ ๊ฒ C++ ์ฝ๋ฉ ์คํ์ผ์ด๋ค
C++์ int์ *์ ๋ถ์ฌ ์ด๋ค
9.15 NULL ํฌ์ธํฐ์ ๋ฐํ์ ์๋ฌ
ํฌ์ธํฐ ๋ณ์๋ฅผ ์ด๊ธฐํํ ๋๋ NULL๋ก ์ด๊ธฐํํ๋ค
NULL ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ํด๋น ํฌ์ธํฐ ๋ณ์๋ฅผ ์ฌ์ฉํด๋ ๋๋์ง ์ ๋๋์ง ํ๋ณํด์ฃผ๊ธฐ ์ํจ์ด๋ค
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
/*
int *ptr = 1234; // runtime error
printf("%p\n", ptr);
printf("%d\n", *ptr);
*/
int* safer_ptr = NULL;
int a = 123;
//safer_ptr = &a;
if (a % 2 == 0)
safer_ptr = &a;
if (safer_ptr != NULL)
printf("%p\n", safer_ptr);
if (safer_ptr != NULL)
printf("%d\n", *safer_ptr);
return 0;
}
9.16 ๋๋ฒ๊ฑฐ๋ก ๋ฉ๋ชจ๋ฆฌ ๋ค์ฌ๋ค๋ณด๊ธฐ
๋ฉ๋ชจ๋ฆฌ์ ์ด๋ค ๊ฐ์ด ๋ค์ด๊ฐ ์๋์ง ํ์ธํ๊ณ ์ถ์ผ๋ฉด
๋๋ฒ๊น ๋ชจ๋ ์คํ -> Debug -> Windows -> Memory ๋ก ๋ค์ด๊ฐ์ ํ์ธํ ์ ์๋ค.
9.17 ํฌ์ธํฐ ๋ณ์์ ํฌ๊ธฐ
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
char a;
float b;
double c;
char* ptr_a = &a;
float* ptr_b = &b;
double* ptr_c = &c;
printf("%zd %zd %zd\n", sizeof(a), sizeof(b), sizeof(c));
printf("%zd %zd %zd\n", sizeof(ptr_a), sizeof(ptr_b), sizeof(ptr_c));
printf("%zd %zd %zd\n", sizeof(&a), sizeof(&b), sizeof(&c));
printf("%zd %zd %zd\n", sizeof(char*), sizeof(float*), sizeof(double*));
return 0;
}
๊ฒฐ๊ณผ๊ฐ
1 4 8
4 4 4
4 4 4
4 4 4
ํฌ์ธํธ ๋ณ์์ ํฌ๊ธฐ๋
x84 : 4byte
x64 : 8byte
9.18 ํฌ์ธํฐํ ๋งค๊ฐ๋ณ์
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void swap(int* a, int* b)
{
printf("%p %p\n", a, b);
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int a = 123;
int b = 456;
printf("%p %p\n", &a, &b);
swap(&a, &b); // ๊ฐ์ด ์๋ ์ฃผ์ ๋์
printf("%d %d\n", a, b);
return 0;
}
ํจ์๋ก ์ฌ๋ฌ๊ฐ์ง ๊ฐ์ ๋ฐํํ ๋ ํฌ์ธํฐํ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ๋ค
'์ฃผ์(ํฌ์ธํฐ)์ ์ํ ํธ์ถ'
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void swap(int a, int b)
{
printf("%p %p\n", a, b);
int temp = a;
a = b;
b = temp;
}
int main()
{
int a = 123;
int b = 456;
printf("%p %p\n", &a, &b);
swap(a, b);
printf("%d %d\n", a, b);
return 0;
}
์ ์ฝ๋์ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์ค์์ด ๋์ง๋ ์๊ณ
swapํจ์์ int a, int b์ mainํจ์์ int a, int b์ ์ฃผ์๊ฐ ๋ค๋ฅธ ๊ฑธ ๋ณผ ์ ์๋ค.
๋์ ์๋ก ์ด๋ฆ๋ง ๊ฐ์ ๋ฟ ๋ค๋ฅธ ๋ณ์๋ค. ์ด๋ฅผ '๊ฐ์ ์ํ ํธ์ถ'์ด๋ผ ๋ถ๋ฅธ๋ค.
'๋ฐ๋ฐฐ์จ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐ๋ฐฐ์จ 10.12 ~ (0) | 2021.01.26 |
---|---|
๋ฐ๋ฐฐ์จ 10.1 ~ (0) | 2021.01.25 |
๋ฐ๋ฐฐ์จ 9.1 ~ (0) | 2021.01.19 |
๋ฐ๋ฐฐ์จ 7.10 ~ (0) | 2021.01.18 |
๋ฐ๋ฐฐ์จ 7.2 ~ (0) | 2021.01.15 |