๐Ÿ“ Coding Test Study/C++

[10์ฃผ ์™„์„ฑ C++ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ] ํ•„์ˆ˜๊ฐœ๋… - ๋ฉ”๋ชจ๋ฆฌ์™€ ํฌ์ธํ„ฐ(pointer)

ibelieveinme 2023. 8. 5. 22:02
728x90

* ๋ฉ”๋ชจ๋ฆฌ

 

์ปดํ“จํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์…€์˜ ์—ฐ์†๊ณผ ๊ฐ™๋‹ค.

๊ฐ ์…€์˜ ํฌ๊ธฐ๋Š” 1byte ์ด๊ณ  ๊ณ ์œ ์˜ ์ฃผ์†Œ๊ฐ€ ์žˆ๋‹ค.

 

int i;

์œ„์™€ ๊ฐ™์ด int ํƒ€์ž…์„ ์„ ์–ธํ•˜๋ฉด 4Byte์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์—์•ฝํ•˜๊ฒŒ ๋œ๋‹ค.

์ปดํ“จํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ 128GB ๋ผ๊ณ  ํ•  ๋•Œ, 128GB ์ค‘ 4Byte์˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์˜ˆ์•ฝํ•˜๋Š” ๊ฒƒ.

 

cout << &i << "\n";

i ์˜ ์ฃผ์†Œ๋ฅผ ์ถœ๋ ฅํ•ด๋ณด์ž.

์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์…€์˜ ์ฒซ๋ฒˆ์งธ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ ธ์™€์„œ ์ถœ๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค.

๋„ฃ๋Š” ๊ฐ’์ด ๋‹ฌ๋ผ์ ธ๋„ ์ฃผ์†Œ๋Š” ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค.

์ฃผ์†Œ๊ฐ’์€ OS, ์‹คํ–‰์‹œ๊ฐ„ ๋“ฑ์— ๋”ฐ๋ผ ์ฃผ์†Œํ• ๋‹น์ด ๋‹ฌ๋ผ์ง„๋‹ค.


* ํฌ์ธํ„ฐ

๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋Š” ์ž๋ฐ”, ํŒŒ์ด์ฌ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ํ•ด์ค€๋‹ค. ๋Œ€์‹  ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋ณ€์ˆ˜์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๊ฑฐ๋‚˜ ํ•ด์ œํ•  ์ˆ˜ ์—†๋‹ค.

ํ•˜์œ„๋ ˆ๋ฒจ ์–ธ์–ด์ธ C, C++ ์€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์—†๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์˜ˆ์•ฝํ•˜๊ณ  ํ•ด์ œํ•ด์•ผ ํ•œ๋‹ค. ๋Œ€์‹  ํฌ์ธํ„ฐ๋ฅผ ์ง€์›ํ•œ๋‹ค.

 

Pointer: ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ๋ฅผ ๋‹ด๋Š” ํƒ€์ž…. ๋ณ€์ˆ˜์˜ ์ฒซ๋ฒˆ์งธ ๋ฐ”์ดํŠธ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

             ๋ฉ”๋ชจ๋ฆฌ ๋™์ ํ• ๋‹นํ•  ๋•Œ, ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ ์—†์ด ํ•จ์ˆ˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•  ๋•Œ, ํด๋ž˜์Šค ๋ฐ ๊ตฌ์กฐ์ฒด๋ฅผ ์—ฐ๊ฒฐํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

Pointer ์„ ์–ธ ๊ธฐ๋ณธํ˜•

<ํƒ€์ž…> * <๋ณ€์ˆ˜๋ช…> = <ํ•ด๋‹น ํƒ€์ž…์˜ ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ>
int *b = &a;

*์€ ์—์Šคํ„ฐ๋ฆฌ์Šคํฌ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๊ฐ™์€ ํƒ€์ž…์œผ๋กœ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค.

 

#include <iostream>
using namespace std;

double a = 4.4;
int c = 10;

int main(){
    double *b = &a;
    int *d = &c;
    cout << sizeof(b) << "\n";
    cout << sizeof(d) << "\n";
}
4
4

ํฌ์ธํ„ฐ ํฌ๊ธฐ(์ฃผ์†Œ์˜ ํฌ๊ธฐ)๋Š” ํƒ€์ž…์˜ ํฌ๊ธฐ๊ฐ€ ์•„๋‹Œ OS์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค.

64 bit ์šด์˜์ฒด์ œ์ด๋ฉด 8byte. 32 bit ์šด์˜์ฒด์ œ์ด๋ฉด 4byte๋ฅผ ๊ฐ–๋Š”๋‹ค. (๋‚˜ 64bit ์ธ๋ฐ ์™œ 4byte๋ƒ...)

๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋Š” ๋‹ค๋ฅผ์ง€๋ผ๋„ ์ฃผ์†Œ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋Š” ๊ณ ์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ.

 

* array to pointer decay

#include <iostream>
using namespace std;

int a[3] = { 1, 2, 3 };

int main() {
	int *c = a;
	cout << c << "\n";
	cout << &a[0] << "\n";
	cout << c + 1 << "\n";
	cout << &a[1] << "\n";
}
006F8044
006F8044
006F8048
006F8048

์ •์ ํƒ€์ž…์ธ ๋ฐฐ์—ด์€ ์ด๋ฆ„์ž์ฒด๋กœ ์ฃผ์†Œ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ž˜์„œ ์œ„์™€ ๊ฐ™์ด int *c = a; ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

728x90