ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

โ–ถ ๋ฐฐ์—ด์€ ์‚ฌ์‹ค "ํฌ์ธํ„ฐ์ƒ์ˆ˜"์˜€๋‹ค!!!

int * ptr, char * ptr ๋“ฑ์œผ๋กœ ์„ ์–ธํ•œ ๊ฒƒ์€ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์ด๋‹ค.
์ดˆ๊ธฐํ™” ํ•œ ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ ๊ฐ’์„ ์ €์žฅํ•˜์ง€๋งŒ ์›ํ•œ๋‹ค๋ฉด ๋‹ค๋ฅธ ์ฃผ์†Œ ๊ฐ’๋„ ์ถฉ๋ถ„ํžˆ ๋Œ€์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋ฐฐ์—ด์€ ๋‹ค๋ฅธ ์ฃผ์†Œ๊ฐ’์„ ๋Œ€์ž…ํ•  ์ˆ˜ ์—†๋‹ค. ์ฆ‰, ๋ฐฐ์—ด์€ ํ•œ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ ์ƒ์ˆ˜!!
๋˜ํ•œ ํฌ์ธํ„ฐ์˜ ์ž๋ฃŒํ˜•์ด char, int, double ๋“ฑ์œผ๋กœ ์„ ์–ธ ๋˜๋ฉด ๊ฐ๊ฐ sizeof(type)์˜ ๊ฐ„๊ฒฉ์œผ๋กœ ๋ง์…ˆ๋บ„์…ˆ ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋“ฏ์ด ๋ฐฐ์—ด ๋’ค์— ๋ถ™๋Š” [0], [1], [2] ..์˜ ๊ฐ„๊ฒฉ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ sizeof(type)๋งŒํผ์˜ ๊ฐ„๊ฒฉ์œผ๋กœ ์„ค์ •๋œ๋‹ค.

โ–ถ ๋ฌธ์ž์—ด์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ

char str_arr[] = "RACCOON";
char * str_ptr = "RACCOON";

 

๋ฐฐ์—ด๋กœ ์„ ์–ธํ•œ ๋ฌธ์ž์—ด์˜ ๊ฒฝ์šฐ, ๋ฐฐ์—ด ์•ˆ์— ํ•œ ๊ธ€์ž ํ•œ ๊ธ€์ž ๋‹ด๊ธฐ๊ธฐ ๋•Œ๋ฌธ์—
์ˆ˜์ •์„ ํ•  ๋•Œ์—๋„ ๊ฐ ๋ฌธ์ž ๋ณ„๋กœ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ง€๊ธˆ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ๊ฐ€

str_arr,  str_arr[0] -> 'R' ์˜ ์ฃผ์†Œ ๊ฐ’
          str_arr[1] -> 'A' ์˜ ์ฃผ์†Œ ๊ฐ’    
          // (charํ˜• ๋ฐฐ์—ด์ด๋ฏ€๋กœ str_arr[0]๊ณผ str_arr[1]์˜ ์ฃผ์†Œ ๊ฐ’์€ 1๋ฐ”์ดํŠธ ์ฐจ์ด)
          str_arr[2] -> 'C' ์˜ ์ฃผ์†Œ ๊ฐ’

          // ...

์ด๋Ÿฌํ•œ ํ˜•ํƒœ์ด๋ฏ€๋กœ ๊ฐ๊ฐ์˜ ๋ฐฐ์—ด์ธ๋ฑ์Šค์— ๋‹ค๋ฅธ ๋ฌธ์ž๋ฅผ ๋Œ€์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค.

str_arr[1] = 'I';
printf("%s", str_arr);

// ์ถœ๋ ฅ๊ฒฐ๊ณผ : RICCOON

ํ•˜์ง€๋งŒ ํฌ์ธํ„ฐ๋กœ ์„ ์–ธํ•œ ๋ฌธ์ž์—ด์˜ ๊ฒฝ์šฐ,

๋จผ์ € ๋ฌธ์ž์—ด์ด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ €์žฅ์ด ๋œ ํ›„ ๊ทธ ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

str_ptr[1] = 'I ;

๋”ฐ๋ผ์„œ ์ด๋ ‡๊ฒŒ ๋ฐ”๊ฟ€์ˆ˜ ์—†๋‹ค!!!!โ€‹

โ–ถ ๋ฌธ์ž์—ด์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ2 :: char * arr VS char * arr[]

char *str_ptr = "Hello";

char str_arr[] = "Hello";

์ด ๊ฒฝ์šฐ์—

str_ptr์€ " Hello\0 "์ด ์ญ‰ ์—ฐ๊ฒฐ๋œ "์ƒ์ˆ˜ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด"์˜ ์ฒซ๋จธ๋ฆฌ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๋Š” "ํฌ์ธํ„ฐ ๋ณ€์ˆ˜"์ด๊ณ ,

str_arr์€ 'H','e','l','l','o','\0' ์ด๋ผ๋Š” "๋ณ€์ˆ˜ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด"์˜ ์ฒซ๋จธ๋ฆฌ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๋Š” "ํฌ์ธํ„ฐ ์ƒ์ˆ˜"์ด๋‹ค!!!

 

๋˜ํ•œ,

char * arr ๊ณผ char arr[]์ด๋ผ๋Š” ํ‘œ๊ธฐ๋Š” ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ์จ๋Š” ์™„์ „ํžˆ ๊ฐ™์€ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š”๋‹ค.

void Func ( char * arr )

void Func ( char arr[] )

  ์œ„ ๋‘˜์€ ์™„์ „ํžˆ ๊ฐ™์€ ์„ ์–ธ!!!!!

 

๋‘˜๋‹ค charํ˜• ๋ฐฐ์—ด์˜ ์ฃผ์†Œ๊ฐ’์„ ์ธ์ž๋กœ ์ „๋‹ฌ๋ฐ›๋Š”๋ฐ,

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ์™„์ „ํžˆ ๊ฐ™์€ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š”๊ฒƒ์€ ์˜ค์ง!! ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์“ฐ์ผ๋•Œ๋งŒ!!!

ํ•จ์ˆ˜๋‚ด์—์„œ๋Š” ์ ˆ๋Œ€ char arr[]์ด char *arr์„ ๋Œ€์‹  ํ•  ์ˆ˜ ์—†๋‹ค.

โ–ถ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์˜ ์ดˆ๊ธฐํ™” (NULL)

ํฌ์ธํ„ฐ๋ฅผ ์„ ์–ธํ•œ ํ›„์— ์ดˆ๊ธฐํ™” ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ทธ ์•ˆ์— ์“ฐ๋ ˆ๊ธฐ๊ฐ’์ด ์ €์žฅ๋œ๋‹ค.

์ดˆ๊ธฐํ™”ํ•˜์ง€ ์•Š๊ณ  ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋‚˜ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜ฌ ๊ฒฝ์šฐ

ํ”„๋กœ๊ทธ๋žจ์ด ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚จ๋‹ค. ๋”ฐ๋ผ์„œ ์ฒ˜์Œ์— ์„ ์–ธ๊ณผ ํ•จ๊ป˜ NULL๋กœ ์ดˆ๊ธฐํ™” ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

NULL์€ 0 ์„ ์˜๋ฏธํ•˜๋Š”๋ฐ, ์ด๊ฒƒ์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ 0๋ฒˆ์ง€๋ผ๋Š” ์˜๋ฏธ๊ฐ€ ์•„๋‹ˆ๋ผ “์•„๋ฌด ์ฃผ์†Œ๊ฐ’๋„ ์ €์žฅ๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค.”๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.

โ–ถ ๋ฐฐ์—ด์˜ ๊ธธ์ด์ •๋ณด

ํ•จ์ˆ˜์˜ ์ธ์ž๊ฐ’์œผ๋กœ ๋ฐฐ์—ด์˜ ์ฃผ์†Œ๊ฐ’์„ ์ „๋‹ฌํ•  ๋•Œ์—๋Š” ๋ฐฐ์—ด์˜ ๊ธธ์ด์ •๋ณด๋„ ํ•จ๊ป˜ ์ „๋‹ฌํ•ด์ฃผ์–ด์•ผํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค.

์ด๋ฏธ ์ธ์ž๊ฐ’์œผ๋กœ ๋„˜๊ฒจ์ฃผ๊ณ  ๋‚œ ๋’ค์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ด์šฉํ•˜์—ฌ sizeof์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•˜๋ฉด ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ ๊ตฌํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ, ๋ฐฐ์—ด์˜ ์ฃผ์†Œ๊ฐ’์„ ๋‹ด์€ ํฌ์ธํ„ฐ ๋ณ€์ˆ˜์˜ ํฌ๊ธฐ๊ฐ€ ์ถ”์ถœ๋˜๊ธฐ ๋•Œ๋ฌธ!!

(ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋Š” ์ž๋ฃŒํ˜•์— ๊ด€๊ณ„์—†์ด ๋ฌด์กฐ๊ฑด ์ฃผ์†Œ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ๋•Œ๋ฌธ์— 32bit์‹œ์Šคํ…œ์—์„œ๋Š” 4๋ฐ”์ดํŠธ, 64bit์—์„œ๋Š” 8๋ฐ”์ดํŠธ์ด๋‹ค.)

์ด๋•Œ, ๋ฐฐ์—ด์˜ ๊ธธ์ด์ •๋ณด๋Š” sizeof(๋ฐฐ์—ด์ด๋ฆ„)/sizeof(์ž๋ฃŒํ˜•)๋กœ ๊ตฌํ•œ๋‹ค.

int arr[3];
int arr_num;

arr_num = sizeof(arr)/sizeof(int);
๋Œ“๊ธ€