๐Ÿ’ก

๋”ฐ๋ฐฐ์”จ 9.10 ~ ๋ณธ๋ฌธ

๋”ฐ๋ฐฐ์”จ

๋”ฐ๋ฐฐ์”จ 9.10 ~

์•„์˜ณ์ด 2021. 1. 21. 19:08

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