Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

๋ฐฐ์—ด & ํฌ์ธํ„ฐ & malloc๊ณผ์˜ ๊ด€๊ณ„..

111 views
Skip to first unread message

kuru

unread,
Apr 4, 2001, 9:18:55โ€ฏAM4/4/01
to
์งˆ๋ฌธ1
----------------------------------------------------------------------------
๋ผ์ธ 1: char *p1 = "1234567890";

๋ผ์ธ 2: char *p1;
p1 = malloc( 10 );
p1 = "1234567890";

๋ผ์ธ1๋กœ ํ–ˆ์„๋•Œ์™€ ๋ผ์ธ2๋กœ ํ–ˆ์„๋•Œ์˜ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ฒฝํ—˜์ƒ ๋ณด๋ฉด ๋ผ์ธ 1๊ณผ ๊ฐ™์ด ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” p1 ๋ณ€์ˆ˜์— ๋“ค์–ด๊ฐˆ ๊ฐ’์ด
์ž‘์€ ๊ฒฝ์šฐ์ด๋ฉฐ..๋งŒ์ผ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š”๋ฐ ์‚ฌ์šฉํ•  ๋ณ€์ˆ˜์ธ๋ฐ malloc์„ ์‚ฌ์šฉํ•˜์ง€
์•Š์œผ๋ฉด ํฌ์ธํ„ฐ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋”๊ตฐ์š”.. ๊ทธ๋ž˜์„œ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด
malloc์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋”๊ตฐ์š”..

๊ทธ๋ž˜์„œ ์ €๋Š” ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. "๋ผ์ธ 1๊ณผ ๊ฐ™์ด ํ•  ๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€
์ผ์ •ํ•œ ํฌ๊ธฐ์˜ ์˜์—ญ์„ ์ž๋™์œผ๋กœ ์žก๊ธฐ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ• ๋•Œ๋Š” ๋ผ์ธ 1๊ณผ ๊ฐ™์ด
์‚ฌ์šฉํ•˜๊ณ , ๋„ฃ์„ ๊ฐ’์ด ํฐ๊ฒฝ์šฐ๋Š” ๋ฐ˜๋“œ์‹œ malloc์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค" <-- ์ด๋ง์ด
๋งž์Šต๋‹ˆ๊นŒ?
๋งž๋‹ค๋ฉด? ๋„๋Œ€์ฒด ์–ด๋А์ •๋„ ํฌ๊ธฐ๊นŒ์ง€๊ฐ€ malloc์œผ๋กœ ์žก์„ ํ•„์š”๊ฐ€ ์—†๋Š”๊ฑด๊ฐ€์š”?
(๋ณดํ†ต ๋ผ์ธ1๊ณผ ๊ฐ™์ด ํ•  ๊ฒฝ์šฐ ๋ง๋ก์œผ๋กœ ์•ˆ์žก๊ณ  ๋ผ์ธ1๊ณผ๊ฐ™์ด ๊ทธ๋ƒฅ ๋„ฃ๊ณ  printf
ํ•˜์ž–์•„์š”..)

----------------------------------------------------------------------------
์งˆ๋ฌธ2

๋ผ์ธ 1: char p1[10];
๋ผ์ธ 2: char *p1;
p1 = malloc(10);

๋ผ์ธ 1๊ณผ ๋ผ์ธ 2๋Š” ๊ฐ™์€ ๋ง์ด์ฃ ? ๊ทธ๋Ÿผ

๋ผ์ธ 3: char p2[];
๋ผ์ธ 4: char *p2;

๋ผ์ธ 3๊ณผ ๋ผ์ธ 4๋Š” ๊ฐ™์€ ๋ง์ธ๊ฐ€์š”?


----------------------------------------------------------------------------
์งˆ๋ฌธ3

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์†Œ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. (์ „์ฒด์ฝ”๋“œ๋Š” ์•„๋‹ˆ๊ณ  ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.)

file://source start..
struct str_var
{
char *name;
char *value;
};

struct varentry vartable[1024];

void insert_value( const char *name, const char *val )
{
char *nptr, *vptr;
int i;

nptr = (char *) malloc( strlen(name)+1); <---- ์ด ๋ถ€๋ถ„๊ณผ
vptr = (char *) malloc( strlen(val)+1); <---- ์ด ๋ถ€๋ถ„์€ ํ•„์š”๊ฐ€ ์—†๋Š”๊ฑฐ
์•„๋‹Œ๊ฐ€์š”?
strcpy( nptr, name );
strcpy( vptr, val );

for( i=0 ; i<1024 ; i++ )
{
if( vartable[i].name == NULL )
{
vartable[i].name = nptr;
vartable[i].val = vptr;
break;
}
}
}

int main( void )
{
querystr = (char *) malloc( size );
valuestr = (char *) malloc( size );

querystr์— ๊ฐ’ ์ง‘์–ด๋„ฃ๋Š” ์ฝ”๋“œ;
valuestr์— ๊ฐ’ ์ง‘์–ด๋„ฃ๋Š” ์ฝ”๋“œ;

insert_value( querystr, valuestr );
}
file://source end.
-------

nptr = (char *) malloc( strlen(name)+1); <---- ์ด ๋ถ€๋ถ„๊ณผ
vptr = (char *) malloc( strlen(val)+1); <---- ์ด ๋ถ€๋ถ„์€ ํ•„์š”๊ฐ€ ์—†๋Š”๊ฑฐ
์•„๋‹Œ๊ฐ€์š”?

insert_value์— ๋„˜์–ด๊ฐ€๋Š” ๊ฐ’(querystr, valuestr)์€ malloc์œผ๋กœ ๋ฒ”์œ„๋ฅผ
์žก์•˜์Šต๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ตฌ๋‚˜์„œ insert_value์—์„œ call by value๋กœ name๊ณผ val์— ์ฃผ์†Œ๋ฅผ ๋„ฃ์ฃ ?
์ฆ‰, name๊ณผ val์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์€ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ์žกํ˜€์žˆ๋Š” ์–ด๋–ค์ฃผ์†Œ ์˜์—ญ์„
๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๊ฒ ์ฃ ?
๊ทธ๋Ÿฌ๋ฏ€๋กœ char *nptr, *vptr์„ ์ƒˆ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐ›์•„์„œ strcpy๋กœ ๋ณต์‚ฌํ•œ๋‹ค์Œ
vartable[i].name, vartable[i].val์— ๋„ฃ๋Š” ๋™์ž‘์„ ํ• ํ•„์š”์—†์ด..

๊ทธ๋ƒฅ vartable[i].name = name; vartable[i].val = val; ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋˜๋Š”๊ฑฐ
์•„๋‹Œ๊ฐ€์—ฌ?

๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜์–ด์˜จ name๊ณผ val์€ ์ด๋ฏธ ์˜์—ญ์ด ์žกํ˜€์žˆ๋Š” ์•ˆ์ „ํ•œ ํฌ์ธํ„ฐ ์•„๋‹™๋‹ˆ๊นŒ?

๊ทธ๋Ÿฐ๋ฐ ์™œ ๊ทธ๋ ‡๊ฒŒ ๋˜ malloc์„ ์žก๊ณ  ์ €๋ ‡๊ฒŒ ํ•˜์ฃ ?

ํ˜น์‹œ ๋‚˜์ค‘์— ๋‹ค๋ฅธ ๊ณณ์—์„œ ์“ฐ์ผ๊ฒƒ ์„ ์œ„ํ•ด ํ•จ์ˆ˜๋ฅผ ๊ฒฌ๊ณ ํ•˜๊ฒŒ ๋งŒ๋“œ๋А๋ƒ๊ณ  ์ €๋ ‡๊ฒŒ
ํ•œ๊ฑด๊ฐ€์š”?
์•„๋‹ˆ๋ฉด ๋‹ค๋ฅธ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š”๊ฑด๊ฐ€์š”?

=================================================================

ํ—‰ํ—‰.. ์ œ ์งˆ๋ฌธ์„ ์ดํ•ดํ•˜์…จ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.. ^^;;

๊ทธ๋Ÿผ ๋‹ต๋ณ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.


ebazy

unread,
Apr 4, 2001, 10:12:42โ€ฏAM4/4/01
to
๊ณ ์‹œ์ƒ์ž…๋‹ˆ๋‹ค. 3๋ฒˆ์งธ ์งˆ๋ฌธ์˜ ์˜๋„๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•˜๊ฒ ์ง€๋งŒ(์ฝ๊ธฐ ๋Šฅ๋ ฅ์ด
์ข€ ๋–จ์–ด์ ธ์š”.. --;) ๋‹ตํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

> ์งˆ๋ฌธ1
> --------------------------------------------------------------------------


--
> ๋ผ์ธ 1: char *p1 = "1234567890";
>
> ๋ผ์ธ 2: char *p1;
> p1 = malloc( 10 );
> p1 = "1234567890";
>

[ ์งˆ๋ฌธ1]
unix, linux- gcc or g++, turbo c ์•„๋ฌด๋ฐ์„œ๋‚˜ compileํ•ด๋„ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์—๋Ÿฌ๊ฐ€
๋‚˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜ referencing์„ ํ•˜๊ธฐ์œ„ํ•ด์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žก์•„์ฃผ๋Š”
๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ต๋‹ˆ๋‹ค.

> --------------------------------------------------------------------------


--
> ์งˆ๋ฌธ2
>
> ๋ผ์ธ 1: char p1[10];
> ๋ผ์ธ 2: char *p1;
> p1 = malloc(10);
>
> ๋ผ์ธ 1๊ณผ ๋ผ์ธ 2๋Š” ๊ฐ™์€ ๋ง์ด์ฃ ? ๊ทธ๋Ÿผ
>
> ๋ผ์ธ 3: char p2[];
> ๋ผ์ธ 4: char *p2;
>
> ๋ผ์ธ 3๊ณผ ๋ผ์ธ 4๋Š” ๊ฐ™์€ ๋ง์ธ๊ฐ€์š”?

[์งˆ๋ฌธ2]
์ •ํ™•ํžˆ ๊ฐ™์€ notation์ž…๋‹ˆ๋‹ค. ์ฆ‰ *p2๋‚˜ p2[]๋ชจ๋‘ array์˜ ์ฒซ๋ฒˆ์งธ ์‹œ์ž‘ ๋ฒˆ์ง€์ˆ˜๋ฅผ
๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. Base๋ž๋‹ˆ๋‹ค.

> --------------------------------------------------------------------------


--
> ์งˆ๋ฌธ3
>
> ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์†Œ์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. (์ „์ฒด์ฝ”๋“œ๋Š” ์•„๋‹ˆ๊ณ  ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.)
>

> struct str_var
> {
> char *name;
> char *value;
> };
>
> struct varentry vartable[1024];
>
> void insert_value( const char *name, const char *val )
> {
> char *nptr, *vptr;
> int i;
>
> nptr = (char *) malloc( strlen(name)+1); <---- ์ด ๋ถ€๋ถ„๊ณผ
> vptr = (char *) malloc( strlen(val)+1); <---- ์ด ๋ถ€๋ถ„์€ ํ•„์š”๊ฐ€
์—†๋Š”๊ฑฐ
>
> nptr = (char *) malloc( strlen(name)+1); <---- ์ด ๋ถ€๋ถ„๊ณผ
> vptr = (char *) malloc( strlen(val)+1); <---- ์ด ๋ถ€๋ถ„์€ ํ•„์š”๊ฐ€ ์—†๋Š”๊ฑฐ
> ์•„๋‹Œ๊ฐ€์š”?
>

[์งˆ๋ฌธ3]
์ด๊ฑด call by reference์™€ ๊ด€๋ จ๋œ ๊ฒƒ ๊ฐ™๊ตฐ์š”. ๋˜ Aliasing๋„....
์ด์™€๊ฐ™์ด ์ƒˆ๋กœ์ด Allocation์„ ํ•ด์ฃผ๊ณ  ๊ฐ™์€ ๊ฐ’์„ string copy๋ฅผ ํ•˜๋Š” ์ด์œ ๋Š”
์ „ํ˜€๋‹ค๋ฅธ ๋ฒ”์ฃผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.


>๊ทธ๋ƒฅ vartable[i].name = name; vartable[i].val = val; ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด

๋˜๋Š”๊ฑฐ์•„๋‹Œ๊ฐ€์—ฌ? ์ด์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๋‹น๊ทผ segment ์—๋Ÿฌ๊ฐ€ ๋–จ์–ด์ง€๊ฒ ์ง€์š”? ๊ทธ๋ฆฌ๊ณ 
๋œ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ copy๋ฅผ ํ•ด์ฃผ์ง€ ์•Š๊ณ  ๋ฒˆ์ง€์ˆ˜๋ฅผ ์ง์ ‘์ฃผ์—ˆ์„ ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์„ Aliasing์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
์ฆ‰ ์ฃผ ํ•จ์ˆ˜์—์„œ name์ด๋‚˜ val์— ์ƒˆ๋กœ์šด ๊ฐ’์„ Assignํ•˜๊ฒŒ๋˜๋ฉด structure์•ˆ์˜ ๊ฐ’๋„
๊ธฐ๋ƒฅ ๋ฐ”๋€๋‹ˆ๋‹ค. ๋˜‘๊ฐ™์€ ์ฃผ์†Œ๋ฅผ ์„œ๋กœ ๋‹ค๋ฅธ name์—์„œ referencing ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.(ํ‘.
์˜›๋‚ ์— graphics์˜ ์•„ํ”ˆ ์ถ”์–ต์ด.......)


>๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋„˜์–ด์˜จ name๊ณผ val์€ ์ด๋ฏธ ์˜์—ญ์ด ์žกํ˜€์žˆ๋Š” ์•ˆ์ „ํ•œ ํฌ์ธํ„ฐ ์•„๋‹™๋‹ˆ๊นŒ?

์•ˆ์ „ํ•œ ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค.


>๊ทธ๋Ÿฐ๋ฐ ์™œ ๊ทธ๋ ‡๊ฒŒ ๋˜ malloc์„ ์žก๊ณ  ์ €๋ ‡๊ฒŒ ํ•˜์ฃ ?

์œ„์—์„œ ์„ค๋ช…๋“œ๋ฆฐ ๊ฒƒ์ฒ˜๋Ÿผ ์ƒˆ๋กœ์šด ์˜์—ญ์„ ์žก์•„์„œ copyํ•˜๋Š” ๊ฒ๋‹ˆ๋‹ค.

-------------------------
์„ค๋ช…์ด ์ž˜๋˜์—ˆ๋Š”์ง€ ๋ชจ๋ฅด๊ฒ ๊ตฐ์š”. ์กธ์Œ์ด ์‹œ๋‚˜๋ธŒ๋กœ..................... ์•„ ๊ทธ๋ฆฌ๊ณ 
ํฌ์ธํ„ฐ๋งŒ ๊ด€๋ จ๋œ ์ฑ…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‘ ์˜ค๋ž˜๋˜์„œ ๊นŒ๋จน์—ˆ๋Š”๋ฐ ๊ทธ๊ฑธ ํ•จ ๋ณด์‹œ๋ฉด
์ฒœ์žฌ๋˜์‹ญ๋‹ˆ๋‹ค. ์ฃผ์ €๋ฆฌ์ฃผ์ €๋ฆฌ ํ•œ๋ง ๋๋ƒ…๋‹ˆ๋‹ค.

love...@dreamwiz.com

unread,
Apr 4, 2001, 11:10:54โ€ฏAM4/4/01
to
๊ทธ ํฌ์ธํ„ฐ์™€ ๊ด€๋ จ๋œ ์ฑ…์ด ๋ฌด์—ˆ์ธ์ง€ ์•Œ์ˆ˜ ์žˆ์„๊นŒ์š”?
์ •๋ง ๊ถ๊ธˆํ•˜๋„ค์š”..
ํ˜น์‹œ ์•„๋Š” ๋ถ„ ์—†์œผ์„ธ์š”?

>ํฌ์ธํ„ฐ๋งŒ ๊ด€๋ จ๋œ ์ฑ…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‘ ์˜ค๋ž˜๋˜์„œ ๊นŒ๋จน์—ˆ๋Š”๋ฐ ๊ทธ๊ฑธ ํ•จ ๋ณด์‹œ๋ฉด
>์ฒœ์žฌ๋˜์‹ญ๋‹ˆ๋‹ค. ์ฃผ์ €๋ฆฌ์ฃผ์ €๋ฆฌ ํ•œ๋ง ๋๋ƒ…๋‹ˆ๋‹ค.
>
>
>


-----------------===== Posted via NetPle Usenet Service =====-----------------
http://news.NetPle.com ์— ์ ‘์†ํ•˜์‹œ๋ฉด ์ƒˆ๋กœ์šด ์œ ์ฆˆ๋„ท์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค.

Kim, Sung-Ryong

unread,
Apr 4, 2001, 12:34:08โ€ฏPM4/4/01
to
From: "kuru" <evi...@catholic.or.kr>
> ์งˆ๋ฌธ1
> --------------------------------------------------------------------------

--
> ๋ผ์ธ 1: char *p1 = "1234567890";
>
> ๋ผ์ธ 2: char *p1;
> p1 = malloc( 10 );
> p1 = "1234567890";
>
> ๋ผ์ธ1๋กœ ํ–ˆ์„๋•Œ์™€ ๋ผ์ธ2๋กœ ํ–ˆ์„๋•Œ์˜ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
>
> ๊ฒฝํ—˜์ƒ ๋ณด๋ฉด ๋ผ์ธ 1๊ณผ ๊ฐ™์ด ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” p1 ๋ณ€์ˆ˜์— ๋“ค์–ด๊ฐˆ ๊ฐ’์ด
> ์ž‘์€ ๊ฒฝ์šฐ์ด๋ฉฐ..๋งŒ์ผ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š”๋ฐ ์‚ฌ์šฉํ•  ๋ณ€์ˆ˜์ธ๋ฐ malloc์„ ์‚ฌ์šฉํ•˜์ง€
> ์•Š์œผ๋ฉด ํฌ์ธํ„ฐ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋”๊ตฐ์š”.. ๊ทธ๋ž˜์„œ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด
> malloc์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋”๊ตฐ์š”..
>
> ๊ทธ๋ž˜์„œ ์ €๋Š” ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. "๋ผ์ธ 1๊ณผ ๊ฐ™์ด ํ•  ๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€
> ์ผ์ •ํ•œ ํฌ๊ธฐ์˜ ์˜์—ญ์„ ์ž๋™์œผ๋กœ ์žก๊ธฐ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ• ๋•Œ๋Š” ๋ผ์ธ 1๊ณผ ๊ฐ™์ด
> ์‚ฌ์šฉํ•˜๊ณ , ๋„ฃ์„ ๊ฐ’์ด ํฐ๊ฒฝ์šฐ๋Š” ๋ฐ˜๋“œ์‹œ malloc์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค" <-- ์ด๋ง์ด
> ๋งž์Šต๋‹ˆ๊นŒ?
> ๋งž๋‹ค๋ฉด? ๋„๋Œ€์ฒด ์–ด๋А์ •๋„ ํฌ๊ธฐ๊นŒ์ง€๊ฐ€ malloc์œผ๋กœ ์žก์„ ํ•„์š”๊ฐ€ ์—†๋Š”๊ฑด๊ฐ€์š”?
> (๋ณดํ†ต ๋ผ์ธ1๊ณผ ๊ฐ™์ด ํ•  ๊ฒฝ์šฐ ๋ง๋ก์œผ๋กœ ์•ˆ์žก๊ณ  ๋ผ์ธ1๊ณผ๊ฐ™์ด ๊ทธ๋ƒฅ ๋„ฃ๊ณ  printf
> ํ•˜์ž–์•„์š”..)

์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ์™€ malloc์€ ์•„๋ฌด ๊ด€๊ณ„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ๋Š” ๊ทธ๋ƒฅ ๋ฉ”๋ชจ๋ฆฌ
์–ด๋”˜๊ฐ€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ 1๋ฒˆ์˜ ๊ฒฝ์šฐ์—๋Š” "1234567890"์ด๋ผ๋Š”
์ŠคํŠธ๋ง์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์˜์—ญ์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. 2๋ฒˆ์˜ ๊ฒฝ์šฐ๋Š”
malloc()์„ ์“ธ ๋ฐ ์—†์ด ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. malloc()์œผ๋กœ ์–ป์–ด์ง„ 10๋ฐ”์ดํŠธ ๋ฐ์ดํ„ฐ๋Š”
์“ฐ๋ ˆ๊ธฐ๊ฐ€ ๋˜์ง€์š”. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ˆ๋ฅผ ๋“œ๋Š” ๊ฒƒ์ด ๋” ๋‚ณ์•„ ๋ณด์ž…๋‹ˆ๋‹ค.

2-1:
char *p1, *p2;
p1 = "1234567890";
p2 = malloc(11);
strcpy(p2, p1);

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด p1์€ "1234567890"์ด ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ๋งจ ์•ž์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  p2๋Š” ํž™ ์˜์—ญ
์–ด๋”˜๊ฐ€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋˜์–ด p1๊ณผ p2๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ณณ์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์ง€๋งŒ, ๊ฐ€๋ฆฌํ‚ค๋Š”
๊ณณ์— ์žˆ๋Š” ๊ฐ’์„ ๊ฐ™๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

>
> --------------------------------------------------------------------------


--
> ์งˆ๋ฌธ2
>
> ๋ผ์ธ 1: char p1[10];
> ๋ผ์ธ 2: char *p1;
> p1 = malloc(10);
>
> ๋ผ์ธ 1๊ณผ ๋ผ์ธ 2๋Š” ๊ฐ™์€ ๋ง์ด์ฃ ? ๊ทธ๋Ÿผ
>
> ๋ผ์ธ 3: char p2[];
> ๋ผ์ธ 4: char *p2;
>
> ๋ผ์ธ 3๊ณผ ๋ผ์ธ 4๋Š” ๊ฐ™์€ ๋ง์ธ๊ฐ€์š”?
>
>

์ „ํ˜€ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค. 1์—์„œ p1์€ ๋ฌธ์ž ๋ฐฐ์—ด์ด๊ณ , 2์—์„œ๋Š” ๋ฌธ์ž ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค.
๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ๋Š” ๊ฐ™์€ semantics๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์œผ๋‚˜, ์ „ํ˜€ ๋‹ค๋ฅธ
semantics๋ฅผ ๋ณด์ด๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋‘˜์€ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€
๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค. 3์€ ansi C์—์„œ๋Š” ์“ฐ์ง€ ์•Š๋Š” ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ

3-1: extern char p2[];
4-1: extern char *p2;

์ด๊ฒƒ์ด ๊ฐ™์€ ํ‘œํ˜„์ด๋ƒ๊ณ  ๋ฌผ์œผ์‹  ๊ฒƒ์ด๋ผ๋ฉด, ๊ทธ ๊ฒฝ์šฐ์—๋„ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ํฌ์ธํ„ฐ ๋ ˆํผ๋Ÿฐ์‹ฑ๊ณผ ์–ด๋ ˆ์ด ๋ ˆํผ๋Ÿฐ์‹ฑ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ธ๋ฐ,
์ดˆ๋ณด์‹œ๋ผ๋ฉด ๋ฐฐ์—ด๋กœ ๋ฐ˜๋“œ์‹œ ์ •์˜(definition)๋œ ๊ฒƒ์€ ๋ฐฐ์—ด๋กœ
์„ ์–ธ(declaration)ํ•˜๊ณ  ํฌ์ธํ„ฐ๋กœ ์ •์˜๋œ ๊ฒƒ์€ ํฌ์ธํ„ฐ๋กœ ์„ ์–ธํ•œ๋‹ค๊ณ  ์ดํ•ดํ•˜์‹œ๋Š”
๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.


> --------------------------------------------------------------------------

์ดํ•ดํ•˜์…”์•ผ ํ•  ๊ฒƒ์€ ํฌ์ธํ„ฐ๋ฅผ ๋Œ€์ž…ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•œ๋‹ค๋Š”
๊ฒƒ์„ ์˜๋ฏธํ•˜๊ณ , strcpy๋ฅผ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ํ•œ ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๊ฐ’์„
๋‹ค๋ฅธ ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฉ”๋ชจ๋ฆฌ๋กœ ๋ณต์‚ฌํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ ๋” ์ง‘์–ด๋„ฃ๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์‹œ๋ฉด ์‰ฝ์Šต๋‹ˆ๋‹ค.

querystr = (char *) malloc( size );
valuestr = (char *) malloc( size );

querystr์— ๊ฐ’ ์ง‘์–ด๋„ฃ๋Š” ์ฝ”๋“œ; ๊ฐ’ "a"
valuestr์— ๊ฐ’ ์ง‘์–ด๋„ฃ๋Š” ์ฝ”๋“œ; ๊ฐ’ "b"

(1) insert_value( querystr, valuestr );

querystr์— ๋‹ค๋ฅธ ๊ฐ’ ์ง‘์–ด๋„ฃ๋Š” ์ฝ”๋“œ; ๊ฐ’ "c"
valuestr์— ๋‹ค๋ฅธ ๊ฐ’ ์ง‘์–ด๋„ฃ๋Š” ์ฝ”๋“œ; ๊ฐ’ "d"

(2) insert_value( querystr, valuestr );

๋‹˜๊ป˜์„œ ๋ง์”€ํ•˜์‹ ๋Œ€๋กœ ํฌ์ธํ„ฐ ๋Œ€์ž…์„ ํ•œ๋‹ค๋ฉด, (1)์—์„œ ๊ฐ’์„ ๋„ฃ์„ ๋•Œ
variable[0].name์€ querystr๊ฐ€ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋˜๊ณ , variable[0].val์€
valuestr๊ณผ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. (2)์—์„œ ๊ฐ’์„ ๋„ฃ์„ ๋•Œ์—๋„
variable[0].name์€ querystr๊ฐ€ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋˜๊ณ , variable[0].val์€
valuestr๊ณผ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ variable[0].name์ด ๊ฐ€๋ฆฌํ‚ค๋Š”
๋ฉ”๋ชจ๋ฆฌ์—๋Š” ๋ฌด์Šจ ๊ฐ’์„ ์ €์žฅ๋˜์–ด ์žˆ์„๊นŒ์š”? ๊ทธ๋ฆผ์„ ๊ทธ๋ ค๋ณด์‹œ๋ฉด์„œ ๊ณผ์ •์„ ๋”ฐ๋ผ๊ฐ€๋ฉด
์‰ฝ๊ฒŒ ๋‹ต์„ ๋‚ด์‹ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
----
Kim, Sung-Ryong
te...@oski.co.kr
http://www.oski.co.kr

์žฅ์ •ํ˜ธ

unread,
Apr 4, 2001, 12:32:41โ€ฏPM4/4/01
to
์Œ. ํ˜น์‹œ 'Pointer in C'๋ฅผ ๋ง์”€ํ•˜์‹œ๋Š”๊ฒŒ ์•„๋‹Œ์ง€...

--

______________________________________________________________
ARA Network Technologies Co., Ltd.

Jeong-Ho Jang
Research Engineer

Tel : +82-042-828-7770 (413), Fax : +82-042-828-7771
Mobile : +82-011-9400-8022
jhj...@aratech.co.kr
http://cestlavie.homeip.net
--------------------------------------------------------------

<love...@dreamwiz.com> wrote in message
news:9afdhu$u0d$1...@news.netple.com...

kuru

unread,
Apr 4, 2001, 12:45:39โ€ฏPM4/4/01
to
๋‹ต๋ณ€ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ^^

๊ทธ๋ ‡๊ตฐ์š”..

๊ทธ๋Ÿฐ๋ฐ ํ•œ๊ฐ€์ง€ ์ดํ•ด๊ฐ€ ๊ฐ€์งˆ ์•Š๋Š” ๋ถ€๋ถ„์ด ์žˆ์Šต๋‹ˆ๋‹ค.

[์งˆ๋ฌธ3]์„ ์‹คํ—˜ํ•ด ๋ณธ๊ฒฐ๊ณผ ๊ทธ๋ƒฅ vartable[i].name = name; vartable[i].val = val;
--------------------------------
----------------
์ด๋ ‡๊ฒŒ ํ•ด๋„ ์—๋Ÿฌ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋‹˜์˜ ๋‹ต๋ณ€์ค‘์—

> copy๋ฅผ ํ•ด์ฃผ์ง€ ์•Š๊ณ  ๋ฒˆ์ง€์ˆ˜๋ฅผ ์ง์ ‘์ฃผ์—ˆ์„ ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
> ์ด๊ฒƒ์„ Aliasing์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ง์ด ์žˆ๋Š”๋ฐ.. ๋ฒˆ์ง€์ˆ˜๋ฅผ ์ง์ ‘ ์ฃผ์—ˆ์„ ๋•Œ ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๋ง์ธ๊ฐ€์š”?

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค๋งŒ,, ์ข€ ๋” ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช… ํ•ด ์ฃผ์‹ค์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ๋ฉด.. ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ๋œ ์ฐธ๊ณ  ์„œ์ ์ด๋ž˜๋„ ์•Œ๋ ค์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?


๊ทธ๋Ÿผ.. ๋˜ ๋‹ต๋ณ€ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ^^


kuru

unread,
Apr 4, 2001, 1:32:09โ€ฏPM4/4/01
to
๋‹ต๋ณ€ ์ •๋ง ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ํ•œ๊ฐ€์ง€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹˜์˜ ๋ง์”€์ค‘์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ง์ด ์žˆ์Šต๋‹ˆ๋‹ค.

> > ๋ผ์ธ 3: char p2[];
> > ๋ผ์ธ 4: char *p2;
>

> ์ „ํ˜€ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค. 1์—์„œ p1์€ ๋ฌธ์ž ๋ฐฐ์—ด์ด๊ณ , 2์—์„œ๋Š” ๋ฌธ์ž
ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค.
>๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ๋Š” ๊ฐ™์€ semantics๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์œผ๋‚˜, ์ „ํ˜€ ๋‹ค๋ฅธ
>semantics๋ฅผ ๋ณด์ด๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋‘˜์€ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€
>๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.

๋ฌธ์ž๋ฐฐ์—ด๊ณผ ๋ฌธ์ž ํฌ์ธํ„ฐ๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š”๊ฒƒ์€ ์–ด๋””์„œ ๋“ค์€ ๊ธฐ์–ต์ด ๋‚˜๋Š”๋ฐ..

์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ๊ฑด์ง€ ์ข€๋” ์ž์„ธํ•˜๊ฒŒ ๋ง์”€ํ•ด์ฃผ์‹ค์ˆ˜ ์žˆ๋‚˜์š”? ์ œ๊ฐ€ ์ด์ œ๊นŒ์ง€
์‚ฌ์šฉํ•œ๊ฒƒ๋“ค์€

์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‚˜ ๊ฐœ๋…์ด ๋„ˆ๋ฌด๋‚˜๋„ ๋™์ผํ•ด์„œ ์ €๋Š” ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด์„ ๊ฑฐ์˜
๋™์ผํ•˜๊ฒŒ

๊ฐ„์ฃผํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋„๋Œ€์ฒด ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๊ธธ๋ž˜ ๋‹ค๋ฅด๋‹ค๊ณ  ๋ง์”€ํ•˜์‹œ๋Š” ๊ฑด๊ฐ€์š”?


์œ„์˜ ์งˆ๋ฌธ์„ ์จ ๋†“๊ณ  ๋ณด๋‹ˆ ์ œ ๊ธ€์ด ์ƒ๋‹นํžˆ ๊ณต๊ฒฉ์ ์ธ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋„ค์š”..

์šฉ์„œํ•˜์‹œ๊ตฌ์š”. ^^

์˜๋„ํ•œ๊ฑด ์•„๋‹ˆ๊ตฌ์š”.. ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ํ•  ๋ฐฉ๋ฒ•์ด ์—†๋„ค์š”. ^^;;;

----

๊ธ€๊ตฌ ์ €๋„ ์ƒ๋‹นํžˆ ์˜ค๋žœ๊ธฐ๊ฐ„(์ง์žฅ์€ ์•ˆ๋‹ค๋…”์ง€๋งŒ) ํ”„๋กœ๊ทธ๋žจ์„ ๊ณต๋ถ€ํ–ˆ๋‹ค๊ณ 
์ƒ๊ฐํ•˜๋Š”๋ฐ

์•„์ง๋„ ์ด๋Ÿฐ ๋ฌธ์ œ์— ๋ถ€๋”ซํžˆ๋ฉด ๋จธ๊ฐ€๋จผ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹˜์€ ๋„๋Œ€์ฒด C์–ธ์–ด๋ฅผ

์–ด๋–ป๊ฒŒ ๊ณต๋ถ€ํ•˜์‹œ๋‚˜์š”? ์‹œ์ค‘์— ๋‚˜์˜จ ์ผ๋ฐ˜์ ์ธ C ์ฑ…์—๋Š” ์ €์˜ ๋ฌผ์Œ์— ๋Œ€๋‹ตํ•ด ์ค„ ์ˆ˜
์žˆ๋Š”

์ฑ…์„ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. (๋ฌผ๋ก  ์ œ๊ฐ€ ์ฐพ์ง€ ๋ชปํ•ด์„œ ๊ทธ๋Ÿด์ˆ˜๋„ ์žˆ์ง€๋งŒ.. ^^;;)

C์–ธ์–ด ํ‘œ์ค€ ๋ฌธ์„œ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ๋ณด์‹œ๋ฉด์„œ ์Šต๋“ํ•˜์‹ ๊ฑด๊ฐ€์š”?


Kong Hyeog Jun

unread,
Apr 4, 2001, 10:53:31โ€ฏPM4/4/01
to
> > ์งˆ๋ฌธ2
> >
> > ๋ผ์ธ 1: char p1[10];
> > ๋ผ์ธ 2: char *p1;
> > p1 = malloc(10);
> >
> > ๋ผ์ธ 1๊ณผ ๋ผ์ธ 2๋Š” ๊ฐ™์€ ๋ง์ด์ฃ ? ๊ทธ๋Ÿผ
> >
> > ๋ผ์ธ 3: char p2[];
> > ๋ผ์ธ 4: char *p2;
> >
> > ๋ผ์ธ 3๊ณผ ๋ผ์ธ 4๋Š” ๊ฐ™์€ ๋ง์ธ๊ฐ€์š”?
>
> [์งˆ๋ฌธ2]
> ์ •ํ™•ํžˆ ๊ฐ™์€ notation์ž…๋‹ˆ๋‹ค. ์ฆ‰ *p2๋‚˜ p2[]๋ชจ๋‘ array์˜ ์ฒซ๋ฒˆ์งธ ์‹œ์ž‘
๋ฒˆ์ง€์ˆ˜๋ฅผ
> ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. Base๋ž๋‹ˆ๋‹ค.

์•„๋‹™๋‹ˆ๋‹ค. ๋™์ผํ•œ notation์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ผ์ธ 3์€ char ํ˜• ๋ณ€์ˆ˜๋ฐฐ์—ด์„ ์„ ์–ธํ•œ
๊ฒƒ์ด๋ฉฐ,
๋ผ์ธ 4๋Š” char ํ˜• ํฌ์ธํ„ฐ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. *p2๋‚˜ p2[]๊ฐ€ ๋ชจ๋‘ array์˜
์ฒซ๋ฒˆ์งธ ์‹œ์ž‘ ๋ฒˆ์ง€
์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค๋Š” ์„ค๋ช… ๋˜ํ•œ ๋งž์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋ผ์ธ3์„ ์ •ํ™•ํžˆ ํ‘œํ˜„ํ•˜์ž๋ฉด char p2[];๋Š” incomplete array type ์œผ๋กœ ์„ ์–ธ๋œ
๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ํฌ์ธํ„ฐ์™€ ๋ฌธ์ž์—ด๋ฐฐ์—ด๊ณผ ๊ด€๋ จ๋œ ๊ฐ„๋‹จํ•œ ์˜ˆ ์ž…๋‹ˆ๋‹ค .

์•„๋ž˜์™€ ๊ฐ™์ด ์„ ์–ธ๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

char p1[] = "always writable";
char *p2 = "possible not writable ";

p1[0]='x'์™€ ๊ฐ™์€ ํ• ๋‹น์‹์€ ์–ธ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ p2[0]='x'์™€ ๊ฐ™์€
ํ• ๋‹น์‹์€ ๊ฐ€๋Šฅํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, run-time error๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰,
์šด์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋ฉฐ, ์ด์™€ ๊ฐ™์€ ์‹์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

์ด์ฒ˜๋Ÿผ ๋‘˜์€ ๋น„์Šทํ•ด๋ณด์ด์ง€๋งŒ ์ „ํ˜€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ์™€ ๋ฌธ์ž์—ด๋ฐฐ์—ด์ด ๋™์ผํ•˜๋‹ค๊ณ 
๋ง‰์—ฐํ•˜๊ฒŒ ๊ฐœ๋…์ •๋ฆฌํ•˜๊ณ  ์žˆ๋‹ค๊ฐ„, ์œ„ ์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์—์„œ ์ขŒ์ ˆ?ํ•˜๊ธฐ ์‰ฝ์ฃ ...
๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ์™€์˜ ์—ฐ๊ด€๊ด€๊ณ„๊ฐ€ ํ˜ผ๋™์„ ์ดˆ๋ž˜ํ•˜๋Š” ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์— ๋ถ„๋ช…ํ•œ
์ฐจ์ด์ ์„
๋‘๊ณ  ๊ฐœ๋…์ •๋ฆฌ๋ฅผ ๋ช…ํ™•ํžˆ ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.


myco...@hanmail.net

unread,
Apr 4, 2001, 11:45:21โ€ฏPM4/4/01
to
>์งˆ๋ฌธ1
>----------------------------------------------------------------------------
>๋ผ์ธ 1: char *p1 = "1234567890";
>
>๋ผ์ธ 2: char *p1;
> p1 = malloc( 10 );
> p1 = "1234567890";
>
>๋ผ์ธ1๋กœ ํ–ˆ์„๋•Œ์™€ ๋ผ์ธ2๋กœ ํ–ˆ์„๋•Œ์˜ ์ฐจ์ด์ ์ด ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์ผ๋‹จ, ํž™์ด๋‹ˆ ์Šคํƒ์ด๋‹ˆ ํ•˜๋Š” ๊ฐœ๋…์€ ๋ฌด์‹œํ•˜๊ณ , ํ‘œ์ค€์—์„œ ์‚ฌ์šฉํ•˜๋Š” 3๊ฐ€์ง€ ๊ธฐ
์–ต๋ถ€๋ฅ˜๋งŒ์œผ๋กœ ์„ค๋ช…์„ ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ํ›„์— ํŠน์ • ์‹œ์Šคํ…œ์— ์ถ”์ƒ์  ๋‚ด์šฉ์„ ์ 
์šฉ์‹œํ‚ค๋ฉด์„œ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜์‹ค ์ˆ˜ ์žˆ์œผ๋ฆฌ๋ผ ๋ฏฟ์Šต๋‹ˆ๋‹ค.

๋ผ์ธ1: p1 ๋ผ๋Š” char * ํ˜•์˜ ํฌ์ธํ„ฐ๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค. "1234567890" ์€ ์ •์ 
๊ธฐ์–ต๋ถ€๋ฅ˜ (static) ๋ฅผ ๊ฐ€์ง€๋Š” char ํ˜•์˜ ๋ฐฐ์—ด (array of char) ์ž…๋‹ˆ
๋‹ค. *) ๋ฐฐ์—ด์˜ ํฌ์ธํ„ฐ ๋ณ€ํ™˜์— ์˜ํ•ด, ํฌ์ธํ„ฐ p1 ์—๋Š” "1234567890"
์ค‘ ์ฒซ๋ฒˆ์งธ ์š”์†Œ์ธ 1 ์„ ๊ฐ€๋ฅดํ‚ค๋Š” ํฌ์ธํ„ฐ๊ฐ€ ๋Œ€์ž…๋ฉ๋‹ˆ๋‹ค.

*) ๋˜ ์—ญ์‹œ๋‚˜, ๋ฌธ์ž์—ด "์ƒ์ˆ˜" ์ธ๋ฐ, ์–ด๋–ป๊ฒŒ ๋ฐฐ์—ด์ด ๋  ์ˆ˜ ์žˆ๋А๋ƒ๋Š” ๋“ฑ์˜ ํ•ญ
์˜์„ฑ ์งˆ๋ฌธ์— ๋ฏธ๋ฆฌ ๋‹ตํ•ฉ๋‹ˆ๋‹ค. ์ „์—๋„ ์ด์•ผ๊ธฐํ–ˆ์ง€๋งŒ ๋ฌธ์ž์—ด ์ƒ์ˆ˜๋Š” (์‚ฌ์‹ค
์ƒ, "์ƒ์ˆ˜" ๋ผ๋Š” ์˜๋ฏธ๋Š” ์˜์–ด์šฉ์–ด์—๋Š” ์—†์Šต๋‹ˆ๋‹ค. string literal ์ด์ฃ )
C ์—์„œ lvalue ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์•„๋ž˜์™€ ๊ฐ™์€ ํ–‰๋™๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
printf("%c\n", "1234567890"[3]);

๋ผ์ธ2: p1 ์ด๋ผ๋Š” char * ํ˜•์˜ ํฌ์ธํ„ฐ๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค. malloc ๋กœ allocated
(์‚ฌ์šฉ์ž์— ์˜ํ•ด ํ• ๋‹น๋˜๊ณ , ์‚ฌ์šฉ์ž์— ์˜ํ•ด ํ•ด์ œ๋˜๋Š”) ๊ธฐ์–ต๋ถ€๋ฅ˜๋ฅผ ๊ฐ–
๋Š” 10 bytes ์˜ ๊ธฐ์–ต์žฅ์†Œ๋ฅผ ํ• ๋‹น๋ฐ›์•„ ๊ทธ ์ฒซ๋ฒˆ์ง€๋ฅผ p1 ์ด ๊ฐ€๋ฅดํ‚ค๋„๋ก
ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ ์„œ๋Š”, ๋‹ค์‹œ๊ธˆ p1 ์— ์œ„ ๋ผ์ธ1์—์„œ ํ–ˆ๋˜ ํ–‰๋™์„ ํ•ฉ๋‹ˆ
๋‹ค. ์ด๋Š” malloc ๋กœ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žƒ์–ด๋ฒ„๋ฆฐ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ
๋‹ค. (์–ด๋–ป๊ฒŒ p1 ์— ๋Œ€์ž…๋˜์—ˆ๋˜ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฒˆ์ง€๋ฅผ ๋ณต๊ตฌํ•ด ๋‚ด๊ฒ 
์Šต๋‹ˆ๊นŒ?)

>
>๊ฒฝํ—˜์ƒ ๋ณด๋ฉด ๋ผ์ธ 1๊ณผ ๊ฐ™์ด ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” p1 ๋ณ€์ˆ˜์— ๋“ค์–ด๊ฐˆ ๊ฐ’์ด
>์ž‘์€ ๊ฒฝ์šฐ์ด๋ฉฐ..๋งŒ์ผ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š”๋ฐ ์‚ฌ์šฉํ•  ๋ณ€์ˆ˜์ธ๋ฐ malloc์„ ์‚ฌ์šฉํ•˜์ง€
>์•Š์œผ๋ฉด ํฌ์ธํ„ฐ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋”๊ตฐ์š”.. ๊ทธ๋ž˜์„œ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด
>malloc์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋”๊ตฐ์š”..

์ œ๊ฐ€ ๋ณด๊ธฐ์—” ์œ„์˜ ํ–‰๋™์€ ์ด ์„ค๋ช…๊ณผ ์•„๋ฌด๋Ÿฐ ๊ด€๊ณ„๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋‹˜์ด ์˜๋ฏธํ•˜
๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€๋Š” ์•Œ๊ฒ ์ง€๋งŒ, ์œ„์™€ ๊ฐ™์€ ํ–‰๋™์€ 10 bytes ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฒ„
๋ฆฌ๋Š” ๊ฒฐ๊ณผ๋งŒ์„ ์ดˆ๋ž˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ํ‘œ์ค€์—์„œ ์š”๊ตฌํ•˜๋Š” ๋ฐ”๋Š” ์•„๋‹ˆ์ง€๋งŒ, ๋Œ€๋ถ€๋ถ„์˜ ์‹œ์Šคํ…œ์—์„œ๋Š” ์ •์  ๊ธฐ์–ต
๋ถ€๋ฅ˜๋ฅผ ๊ฐ–๋Š” ๋Œ€์ƒ์ฒด๋ฅผ ์ €์ •ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์™€ allocated ๊ธฐ์–ต๋ถ€๋ฅ˜๋ฅผ ๊ฐ–๋Š” ๋Œ€์ƒ
์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋”ฐ๋กœ ๋‘๋ฉฐ, ์ด ๋ฉ”๋ชจ๋ฆฌ์— ํ—ˆ๋ฝ๋˜๋Š” ํฌ๊ธฐ์—ญ์‹œ ๋‹ค๋ฆ…๋‹ˆ
๋‹ค. (์ผ๋ถ€ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ์ด๋ผ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•ด์„œ, ์ด ํฌ๊ธฐ๋“ค์„ ์ž์‹ 
์˜ ํ”„๋กœ๊ทธ๋žจ์— ์ตœ์ ํ™”์‹œํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค) ๋”ฐ๋ผ์„œ, allocated
๊ธฐ์–ต๋ถ€๋ฅ˜๋ฅผ ๊ฐ–๋Š” ๋Œ€์ƒ์ฒด๋ฅผ ์œ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋” ํฌ๊ฒŒ ํ—ˆ๋ฝ๋œ๋‹ค๋ฉด, ๋‹˜์ด ๋ง์”€ํ•˜
์…จ๋“ฏ์ด ์ •์  ๋ฐฐ์—ด๋“ฑ์œผ๋กœ ๋Œ€์ƒ์ฒด๋ฅผ ๋‹ค๋ฃฐ ๋•Œ๋ณด๋‹ค ๋” ๋„‰๋„‰ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์–ป์„ ์ˆ˜
์žˆ๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ด๋Ÿฌํ•œ ์‚ฌํ•ญ๋“ค์€ ํ™˜๊ฒฝ์— ์˜์กด์ ์ธ ๊ฒƒ์ด๋ฉฐ ํ‘œ์ค€์—์„œ
๋Š” ์–ด๋– ํ•œ ์ •์˜๋‚˜ ์š”๊ตฌ๋„ ํ•˜๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋Š˜ ๊ทธ๋ ‡๋‹ค๊ณ  ์ผ๋ฐ˜ํ™”
ํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. *)

*) ํ‘œ์ค€์€ ํ•˜๋‚˜์˜ strictly conforming (๊ฐ€์žฅ ์ด์‹์„ฑ์ด ํฐ) program ์ด ๊ฐ€
์งˆ ์ˆ˜ ์žˆ๋Š” ์ •์  ๋Œ€์ƒ์ฒด์˜ ํฌ๊ธฐ๋ฅผ ๋ช…์‹œํ•ด๋‘์–ด, ๋ชจ๋“  ํ‘œ์ค€์„ ๋”ฐ๋ฅด๋Š”
implementation ์ด ์ตœ์†Œํ•œ ๊ทธ๊ฒƒ๋งŒํผ์€ ์ง€์›ํ•˜๋„๋ก ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
[Translation limits] ํ•˜์ง€๋งŒ, ์ง€๊ทนํžˆ ์ตœ์†Œํ•œ์˜ ์š”๊ตฌ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋Œ€๋ถ€
๋ถ„์˜ implementation ์€ ๋ณดํ†ต ๊ทธ๋ณด๋‹ค ํ›จ์”ฌ ๋งŽ์€ ์—ฌ์œ ๋ฅผ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

>
>๊ทธ๋ž˜์„œ ์ €๋Š” ๊ทธ๋ ‡๊ฒŒ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. "๋ผ์ธ 1๊ณผ ๊ฐ™์ด ํ•  ๊ฒฝ์šฐ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€
>์ผ์ •ํ•œ ํฌ๊ธฐ์˜ ์˜์—ญ์„ ์ž๋™์œผ๋กœ ์žก๊ธฐ๋•Œ๋ฌธ์— ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉํ• ๋•Œ๋Š” ๋ผ์ธ 1๊ณผ ๊ฐ™์ด
>์‚ฌ์šฉํ•˜๊ณ , ๋„ฃ์„ ๊ฐ’์ด ํฐ๊ฒฝ์šฐ๋Š” ๋ฐ˜๋“œ์‹œ malloc์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค" <-- ์ด๋ง์ด
>๋งž์Šต๋‹ˆ๊นŒ?
>๋งž๋‹ค๋ฉด? ๋„๋Œ€์ฒด ์–ด๋А์ •๋„ ํฌ๊ธฐ๊นŒ์ง€๊ฐ€ malloc์œผ๋กœ ์žก์„ ํ•„์š”๊ฐ€ ์—†๋Š”๊ฑด๊ฐ€์š”?

๋‹˜์ด ์ž‘์—…์„ ํ•˜๊ณ  ์žˆ๋Š” ํ™˜๊ฒฝ์— ๋”ฐ๋ผ ๋งŽ์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์‹ฌ์ง€์–ด๋Š” ๋™์ผํ•œ ํ™˜
๊ฒฝ์—์„œ๋ผ๋„, ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์–ด๋– ํ•œ ์ƒํ™ฉ์— ์žˆ๋А๋ƒ์— ๋”ฐ๋ผ์„œ๋„ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ
๋‹ค. ๋”ฐ๋ผ์„œ, ๋ช…์‹œ์ ์œผ๋กœ ์ด๋งŒํผ์€ ํ•ญ์ƒ ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋ง์”€๋“œ๋ฆด ์ˆ˜๋Š” ์—†์œผ๋ฉฐ,
๋” ์ž์„ธํ•œ ์‚ฌํ•ญ์€ ๋‹˜์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•˜๋Š” ์š”์†Œ๋“ค์— ์˜ํ•ด ์ •์˜๋ฉ
๋‹ˆ๋‹ค. C ํ‘œ์ค€์€ malloc ๋ฅ˜์˜ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ํ•จ์ˆ˜์— ์˜ํ•ด ํ• ๋‹น๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜
์†์„ฑ, ๊ทธ์™€ ๊ด€๋ จ๋œ ํฌ์ธํ„ฐ์˜ ๊ฐ’, ํ• ๋‹น์˜ ์‹คํŒจ์—ฌ๋ถ€๋“ฑ์— ๋Œ€ํ•œ ์ •์˜๋งŒ์„ ํ•˜๊ณ 
์žˆ์Šต๋‹ˆ๋‹ค.

>(๋ณดํ†ต ๋ผ์ธ1๊ณผ ๊ฐ™์ด ํ•  ๊ฒฝ์šฐ ๋ง๋ก์œผ๋กœ ์•ˆ์žก๊ณ  ๋ผ์ธ1๊ณผ๊ฐ™์ด ๊ทธ๋ƒฅ ๋„ฃ๊ณ  printf
>ํ•˜์ž–์•„์š”..)
>
>----------------------------------------------------------------------------
>์งˆ๋ฌธ2
>
> ๋ผ์ธ 1: char p1[10];
> ๋ผ์ธ 2: char *p1;
> p1 = malloc(10);
>
>๋ผ์ธ 1๊ณผ ๋ผ์ธ 2๋Š” ๊ฐ™์€ ๋ง์ด์ฃ ? ๊ทธ๋Ÿผ

์•„๋‹™๋‹ˆ๋‹ค. ๊ฐ™์€ ๋ง์ด๋ผ๋ฉด, ๊ฐ€๊ฐ ์œ„์™€ ๊ฐ™์ด ์„ ์–ธํ•˜๊ณ  ์•„๋ž˜์˜ ํ–‰๋™์ด ๋ชจ๋‘ ๊ฐ€
๋Šฅํ•ด์•ผ ๊ฒ ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์œ ๋Š” ์•„๋ž˜ Kong Hyeog Jun ๋‹˜์˜ ๋‹ต๋ณ€์„
์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

char array[10];
[๋ผ์ธ1 ํ˜น์€ ๋ผ์ธ2๊ฐ€ ๋‚˜์˜ด]
p1 = array; /* ๋ผ์ธ1์€ ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋ผ์ธ2์ผ ๊ฒฝ์šฐ๋Š” ๊ฐ€๋Šฅ */

>
> ๋ผ์ธ 3: char p2[];
> ๋ผ์ธ 4: char *p2;
>
>๋ผ์ธ 3๊ณผ ๋ผ์ธ 4๋Š” ๊ฐ™์€ ๋ง์ธ๊ฐ€์š”?
>

Kong Hyeog Jun ๋‹˜์˜ ๋‹ต๋ณ€์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.


--
Jun Woong (myco...@hanmail.net)
Dept. of Physics, Univ. of Seoul
Cell: +82 16 467 6247
Web : http://c-expert.uos.ac.kr (Korean only)

myco...@hanmail.net

unread,
Apr 5, 2001, 9:20:29โ€ฏAM4/5/01
to
>
>[์งˆ๋ฌธ3]์„ ์‹คํ—˜ํ•ด ๋ณธ๊ฒฐ๊ณผ ๊ทธ๋ƒฅ vartable[i].name = name; vartable[i].val = val;
> --------------------------------
>----------------
>์ด๋ ‡๊ฒŒ ํ•ด๋„ ์—๋Ÿฌ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
>๊ทธ๋Ÿฐ๋ฐ ๋‹˜์˜ ๋‹ต๋ณ€์ค‘์—
>> copy๋ฅผ ํ•ด์ฃผ์ง€ ์•Š๊ณ  ๋ฒˆ์ง€์ˆ˜๋ฅผ ์ง์ ‘์ฃผ์—ˆ์„ ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
>> ์ด๊ฒƒ์„ Aliasing์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.
>์ด๋Ÿฐ ๋ง์ด ์žˆ๋Š”๋ฐ.. ๋ฒˆ์ง€์ˆ˜๋ฅผ ์ง์ ‘ ์ฃผ์—ˆ์„ ๋•Œ ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋Š” ๋ง์ธ๊ฐ€์š”?
>์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค๋งŒ,, ์ข€ ๋” ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช… ํ•ด ์ฃผ์‹ค์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?
>์•„๋‹ˆ๋ฉด.. ์ด ๋ฌธ์ œ์™€ ๊ด€๋ จ๋œ ์ฐธ๊ณ  ์„œ์ ์ด๋ž˜๋„ ์•Œ๋ ค์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?
>

์•„๋ž˜, ์žฅ์ •ํ˜ธ๋‹˜์˜ ๋‹ต๋ณ€์ค‘์—์„œ ์žฅ์ •ํ˜ธ๋‹˜์ด ๊ฐ€์ •ํ•˜์‹  ์ƒํ™ฉ์„ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž
๋‹ˆ๋‹ค. ๋‹˜์ด ์ „์ฒด ์†Œ์Šค๊ฐ€ ์•„๋‹Œ ๋ถ€๋ถ„์ ์ธ ์†Œ์Šค๋งŒ์„ ์ธ์šฉํ•˜์…จ๊ธฐ ๋•Œ๋ฌธ์—, ์ €๋ฅผ
ํฌํ•จํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๋ถ„๋“ค์€ 2-3๋ฒˆ์งธ ์ž…๋ ฅ์€ main() ์•ˆ์—์„œ ๋”์ด์ƒ malloc ๋ฅผ
ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น๋ฐ›์ง€ ์•Š๊ณ  ์ด๋ฏธ ์ฒซ๋ฒˆ์งธ ์ž…๋ ฅ์—์„œ ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ทธ
๋Œ€๋กœ ์‚ฌ์šฉํ•˜์—ฌ insert...() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์žฅ์ •ํ˜ธ
๋‹˜์˜ ๊ฐ€์ •์„ ๋”ฐ๋ผ์„œ ๋ฉ”๋ชจ๋ฆฌ ์ƒํ™ฉ์„ ๊ทธ๋ฆผ์œผ๋กœ ๊ทธ๋ ค๊ฐ€๋ฉด์„œ ์ดํ•ดํ•ด ๋ณด์‹œ๊ธฐ ๋ฐ”
๋ž๋‹ˆ๋‹ค.

myco...@hanmail.net

unread,
Apr 5, 2001, 9:15:13โ€ฏAM4/5/01
to
[...]

>๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ˆ๋ฅผ ๋“œ๋Š” ๊ฒƒ์ด ๋” ๋‚ณ์•„ ๋ณด์ž…๋‹ˆ๋‹ค.
>
>2-1:
> char *p1, *p2;
> p1 = "1234567890";
> p2 = malloc(11);
> strcpy(p2, p1);
>
>์ด๋ ‡๊ฒŒ ํ•˜๋ฉด p1์€ "1234567890"์ด ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ๋งจ ์•ž์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  p2๋Š” ํž™ ์˜์—ญ
>์–ด๋”˜๊ฐ€๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋˜์–ด p1๊ณผ p2๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๊ณณ์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์ง€๋งŒ, ๊ฐ€๋ฆฌํ‚ค๋Š”
>๊ณณ์— ์žˆ๋Š” ๊ฐ’์„ ๊ฐ™๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
>

๋ฌผ๋ก , p1 ์˜ ๊ฒฝ์šฐ p1 ์˜ ์š”์†Œ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ํ–‰๋™์ด undefined ์ด์ง€๋งŒ, p2 ์˜
๊ฒฝ์šฐ์—๋Š” ์ง€๊ทนํžˆ ์ •์˜๋œ ํ–‰๋™์„ ํ•˜๋Š” ์ฐจ์ด๊ฐ€ ์žˆ์ง€์š”.

>>
>> --------------------------------------------------------------------------
>--
>> ์งˆ๋ฌธ2
>>
>> ๋ผ์ธ 1: char p1[10];
>> ๋ผ์ธ 2: char *p1;
>> p1 = malloc(10);
>>
>> ๋ผ์ธ 1๊ณผ ๋ผ์ธ 2๋Š” ๊ฐ™์€ ๋ง์ด์ฃ ? ๊ทธ๋Ÿผ
>>
>> ๋ผ์ธ 3: char p2[];
>> ๋ผ์ธ 4: char *p2;
>>
>> ๋ผ์ธ 3๊ณผ ๋ผ์ธ 4๋Š” ๊ฐ™์€ ๋ง์ธ๊ฐ€์š”?
>>
>>
>
>์ „ํ˜€ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค. 1์—์„œ p1์€ ๋ฌธ์ž ๋ฐฐ์—ด์ด๊ณ , 2์—์„œ๋Š” ๋ฌธ์ž ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค.
>๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ๋Š” ๊ฐ™์€ semantics๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์œผ๋‚˜, ์ „ํ˜€ ๋‹ค๋ฅธ
>semantics๋ฅผ ๋ณด์ด๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋‘˜์€ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€
>๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค. 3์€ ansi C์—์„œ๋Š” ์“ฐ์ง€ ์•Š๋Š” ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ

ํ‘œ์ค€์—์„œ๋„ ์ถฉ๋ถ„ํžˆ ์ •์˜ํ•˜๊ณ  ์žˆ๋Š”, ์•„์ฃผ ์ž˜ ์“ฐ๋Š” ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ
-ansi, -pedantic -Wall ์˜ต์…˜์œผ๋กœ gcc ๋กœ ์ปดํŒŒ์ผ ํ•ด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
(๋ฌผ๋ก , ๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด์„œ gcc ๊ฐ€ C90 ์ด๋‚˜ C99 ํ‘œ์ค€์„ ์™„๋ฒฝํ•ด ๋”ฐ๋ฅธ๋‹ค๋Š” ๊ฒƒ์€
์•„๋‹™๋‹ˆ๋‹ค)

#include <stdio.h>

char p2[]; /* line A */

int main(void)
{
extern char p2[10];
printf("%lu\n", (unsigned long)sizeof(p2));
return 0;
}

line A ์—์„œ, p2 ์˜ type ์€, array of char ์ด๋ฉฐ, ๊ทธ ํฌ๊ธฐ๋ฅผ ์•Œ ์ˆ˜ ์—†๊ธฐ์—
incomplete type ์ž…๋‹ˆ๋‹ค. ๋ธ”๋Ÿญ์•ˆ์—์„œ p2 ์˜ ์ถ”๊ฐ€์ ์ธ ์„ ์–ธ์— ์˜ํ•ด composite
type ์„ ๋งŒ๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋šœ๋ ทํ•œ ์ฆ๊ฑฐ๊ฐ€ ์—†์„ ๋•Œ๋Š”, ์ฃผ์žฅ์˜ ๊ทผ๊ฑฐ๋กœ ํ‘œ์ค€์„ ์‚ฌ์šฉํ•˜๋Š” ์ผ์ด ์—†์—ˆ์œผ๋ฉด
ํ•ฉ๋‹ˆ๋‹ค. ๊ทผ๊ฑฐ๋กœ์„œ ํ‘œ์ค€๋งŒํผ ์ค‘๋Œ€์„ฑ์„ ๊ฐ–๋Š” ๊ฒƒ๋„ ์—†์ง€๋งŒ, ๊ทธ๋ฆ‡๋œ ๋‚ด์šฉ์„ ์ฃผ
์žฅํ•  ๋•Œ ๋’ท๋ฐ›์นจ๋œ๋‹ค๋ฉด ๋ฌธ์ œ๋„ ๊ทธ๋งŒํผ ์ปค์ง„๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

>
>3-1: extern char p2[];
>4-1: extern char *p2;
>
>์ด๊ฒƒ์ด ๊ฐ™์€ ํ‘œํ˜„์ด๋ƒ๊ณ  ๋ฌผ์œผ์‹  ๊ฒƒ์ด๋ผ๋ฉด, ๊ทธ ๊ฒฝ์šฐ์—๋„ ์™„์ „ํžˆ ๋‹ค๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
>์ด๊ฒƒ์€ ํฌ์ธํ„ฐ ๋ ˆํผ๋Ÿฐ์‹ฑ๊ณผ ์–ด๋ ˆ์ด ๋ ˆํผ๋Ÿฐ์‹ฑ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ธ๋ฐ,
>์ดˆ๋ณด์‹œ๋ผ๋ฉด ๋ฐฐ์—ด๋กœ ๋ฐ˜๋“œ์‹œ ์ •์˜(definition)๋œ ๊ฒƒ์€ ๋ฐฐ์—ด๋กœ
>์„ ์–ธ(declaration)ํ•˜๊ณ  ํฌ์ธํ„ฐ๋กœ ์ •์˜๋œ ๊ฒƒ์€ ํฌ์ธํ„ฐ๋กœ ์„ ์–ธํ•œ๋‹ค๊ณ  ์ดํ•ดํ•˜์‹œ๋Š”
>๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‹จ, ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์—์„œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ๋‹ค์‹œ์“ฐ๊ธฐ (rewrite) ๊ฐ€ ์ผ์–ด๋‚˜๊ธฐ
๋•Œ๋ฌธ์— ์–ด๋– ํ•œ ์ฐจ์ด๋„ ์—†์Šต๋‹ˆ๋‹ค. ์œ„์˜ ๊ฒฝ์šฐ ๋ง์”€ํ•˜์‹  array referencing
๋“ฑ์œผ๋กœ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜์‹œ๋ ค ํ•˜๋Š” ๊ฒƒ์ธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ์œ„ ๊ฐ๊ฐ์˜ ์ˆ˜์‹๋งŒ
์œผ๋กœ๋Š” ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ๋„ ์—†์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ์ „ํ˜€ ๋‹ค๋ฅธ type ์„ ๊ฐ–๋Š” ๊ฒƒ ๋ฟ์ด๋ฉฐ,
์‚ฌ์šฉ์ž๊ฐ€ ๊ทธ ์ฐจ์ด๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌ๋ณ„ํ•˜์ง€ ๋ชปํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

[...]

myco...@hanmail.net

unread,
Apr 5, 2001, 9:03:23โ€ฏAM4/5/01
to
>>
>[ ์งˆ๋ฌธ1]
>unix, linux- gcc or g++, turbo c ์•„๋ฌด๋ฐ์„œ๋‚˜ compileํ•ด๋„ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์—๋Ÿฌ๊ฐ€
>๋‚˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜ referencing์„ ํ•˜๊ธฐ์œ„ํ•ด์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žก์•„์ฃผ๋Š”
>๊ฒƒ์ด ๋ฐ”๋žŒ์งํ•˜๋‹ต๋‹ˆ๋‹ค.
>

์—๋Ÿฌ๋Š” ์—†์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ 10 bytes ๋ฅผ ์“ธ๋ฐ์—†์ด ๋‚ญ๋น„ํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.
๋‹˜์ด ์˜๋ฏธํ•˜์‹œ๋Š” referencing ์ด ์ •ํ™•ํžˆ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ,
์œ„์™€ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žก์•„์ฃผ๋Š” ๊ฒƒ์ด ์•„๋ฌด๋Ÿฐ ์ข‹์€ ์˜๋ฏธ๋ฅผ ๊ฐ–์ง€
๋ชปํ•ฉ๋‹ˆ๋‹ค.

>>
>> ๋ผ์ธ 1: char p1[10];
>> ๋ผ์ธ 2: char *p1;
>> p1 = malloc(10);
>>
>> ๋ผ์ธ 1๊ณผ ๋ผ์ธ 2๋Š” ๊ฐ™์€ ๋ง์ด์ฃ ? ๊ทธ๋Ÿผ
>>
>> ๋ผ์ธ 3: char p2[];
>> ๋ผ์ธ 4: char *p2;
>>
>> ๋ผ์ธ 3๊ณผ ๋ผ์ธ 4๋Š” ๊ฐ™์€ ๋ง์ธ๊ฐ€์š”?
>
>[์งˆ๋ฌธ2]
>์ •ํ™•ํžˆ ๊ฐ™์€ notation์ž…๋‹ˆ๋‹ค. ์ฆ‰ *p2๋‚˜ p2[]๋ชจ๋‘ array์˜ ์ฒซ๋ฒˆ์งธ ์‹œ์ž‘ ๋ฒˆ์ง€์ˆ˜๋ฅผ
>๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. Base๋ž๋‹ˆ๋‹ค.

๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋‹ต๋ณ€์—์„œ ๋‹ค๋ฅธ ๋ถ„์ด ์ถฉ๋ถ„ํžˆ ์„ค๋ช…ํ•ด ๋“œ๋ ธ์Šต๋‹ˆ๋‹ค. ๋ฌผ
๋ก , ๋ผ์ธ1๊ณผ ๋ผ์ธ2 ์—ญ์‹œ ๋‹ค๋ฅธ ๋ง์ž…๋‹ˆ๋‹ค.

[์งˆ๋ฌธ3 ์ƒ๋žต]

myco...@hanmail.net

unread,
Apr 5, 2001, 9:59:55โ€ฏAM4/5/01
to
>๋‹ต๋ณ€ ์ •๋ง ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
>
>๊ทธ๋Ÿฐ๋ฐ ํ•œ๊ฐ€์ง€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
>
>๋‹˜์˜ ๋ง์”€์ค‘์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ง์ด ์žˆ์Šต๋‹ˆ๋‹ค.
>
>> > ๋ผ์ธ 3: char p2[];
>> > ๋ผ์ธ 4: char *p2;
>>
>> ์ „ํ˜€ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค. 1์—์„œ p1์€ ๋ฌธ์ž ๋ฐฐ์—ด์ด๊ณ , 2์—์„œ๋Š” ๋ฌธ์ž
>ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค.
>>๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ๋Š” ๊ฐ™์€ semantics๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์œผ๋‚˜, ์ „ํ˜€ ๋‹ค๋ฅธ
>>semantics๋ฅผ ๋ณด์ด๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋‘˜์€ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€
>>๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.
>
>๋ฌธ์ž๋ฐฐ์—ด๊ณผ ๋ฌธ์ž ํฌ์ธํ„ฐ๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š”๊ฒƒ์€ ์–ด๋””์„œ ๋“ค์€ ๊ธฐ์–ต์ด ๋‚˜๋Š”๋ฐ..
>์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ๊ฑด์ง€ ์ข€๋” ์ž์„ธํ•˜๊ฒŒ ๋ง์”€ํ•ด์ฃผ์‹ค์ˆ˜ ์žˆ๋‚˜์š”? ์ œ๊ฐ€ ์ด์ œ๊นŒ์ง€
>์‚ฌ์šฉํ•œ๊ฒƒ๋“ค์€
>์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‚˜ ๊ฐœ๋…์ด ๋„ˆ๋ฌด๋‚˜๋„ ๋™์ผํ•ด์„œ ์ €๋Š” ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด์„ ๊ฑฐ์˜
>๋™์ผํ•˜๊ฒŒ
>๊ฐ„์ฃผํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋„๋Œ€์ฒด ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๊ธธ๋ž˜ ๋‹ค๋ฅด๋‹ค๊ณ  ๋ง์”€ํ•˜์‹œ๋Š” ๊ฑด๊ฐ€์š”?
>

๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ๋Š” type ์ž์ฒด๊ฐ€ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋‹˜์ด C ์–ธ์–ด์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„
์„ ์ •ํ™•ํ•˜๊ฒŒ ์ดํ•ดํ•˜๊ณ  ๊ณ„์‹œ๊ณ  ๊ทธ ๋‚ด์šฉ๋งŒ์„ ๊ทธ๋Œ€๋กœ ์ ์šฉํ•œ๋‹ค๋ฉด ํ˜ผ๋™์˜ ์—ฌ์ง€
๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ดˆ๋ณด๋“ค์ด ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ์˜ ๊ด€๊ณ„์— ๋Œ€ํ•ด์„œ ์–ด๋ ค์›Œ ํ•˜๋Š” ์ด์œ ๋Š”
๋ฐฐ์—ด, ํฌ์ธํ„ฐ ์ž์ฒด์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ (์•„๋ž˜์— ์ ๊ฒ ์ง€๋งŒ ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ์˜ ๋ณ€
ํ™˜ ๊ด€๊ณ„๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค) C ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์˜ ์ง€์‹์ด ๋ถ€์กฑํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ฐฐ์—ด์€ ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ๋งฅ์—์„œ ๊ทธ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” ํฌ์ธํ„ฐ๋กœ decay ํ•ฉ๋‹ˆ
๋‹ค. ๋˜ํ•œ ํ•œ๋ฒˆ decay ํ•œ ๋ฐฐ์—ด์€ ๋‹ค์‹œ๋Š” ๋ฐฐ์—ด๋กœ ๋Œ์•„์˜ฌ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š”
๋ฐฐ์—ด์ด ํฌ์ธํ„ฐ๋กœ ๋ณ€ํ™˜๋˜๋Š” ์ƒํ™ฉ์— ๋Œ€ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค.

array of type ์€ sizeof, ๋‹จํ•ญ & ์—ฐ์‚ฐ์ž์˜ ํ”ผ์—ฐ์‚ฐ์ž์ธ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š”
๊ทธ ์š”์†Œ์ค‘ ์ฒซ๋ฒˆ์งธ๋ฅผ ๊ฐ€๋ฅดํ‚ค๋Š” ํฌ์ธํ„ฐ pointer to type ์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.
(๋˜ํ•œ, ๋ฌธ์ž๋ฐฐ์—ด array of char ์ด๋‚˜ wide character ์˜ ๋ฐฐ์—ด array of
wchar_t ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” (wide) string literal ์—ญ์‹œ ํฌ์ธํ„ฐ๋กœ decay ํ•˜์ง€
์•Š์Šต๋‹ˆ๋‹ค - ์ œ๊ฐ€ ๋‹ค๋ฅธ ๊ธ€์—์„œ string literal ์ด ๋ถ„๋ช… ๋ฐฐ์—ด์ด๋ผ๊ณ  ๋ง์”€๋“œ
๋ ธ์ฃ ?)

๋”ฐ๋ผ์„œ, pointer to char ์˜ ํฌ๊ธฐ๊ฐ€ 4 bytes ๋ผ๊ณ  ๊ฐ€์ •ํ•œ๋‹ค๋ฉด, ๋‹ค์Œ ์ˆ˜์‹์˜
๊ฒฐ๊ณผ๋Š” ์ด๋ ‡์Šต๋‹ˆ๋‹ค. (์ œ ์œ„์˜ ์„ค๋ช…์„ ์ž˜ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์š”)

char s[10];

sizeof(s); /* 10 */
sizeof(&s[0]); /* 4 */
sizeof(s+0); /* 4 */
sizeof(*&s); /* 10 */

C ์˜ ๋‹ค๋ฅธ ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์ง€์‹์ด ๋ถ€์กฑํ•ด์„œ ํ˜ผ๋™ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด ๋ณด์ง€์š”.
๋ฐฐ์—ด์€ incomplete type ์„ ์š”์†Œ๋กœ ๊ฐ€์งˆ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํฌ์ธํ„ฐ๋Š” ๊ฐ€
๋ฅด์ผœ์ง€๋Š” type ์œผ๋กœ์„œ incomplete type ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์ง€์š”. ๋”ฐ๋ผ์„œ,

struct foo; /* incomplete type */
typedef struct foo foo_type;
foo_type array[10]; /* invalid! */
foo_type *pointer; /* valid */

ํ•˜์ง€๋งŒ, ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์„ ์–ธ์—์„œ๋Š” "์œ ํšจํ•œ" ๋ฐฐ์—ดํ˜•์€ ํฌ์ธํ„ฐํ˜•์œผ๋กœ ๋‹ค์‹œ
์“ฐ์—ฌ์ง‘๋‹ˆ๋‹ค (rewrite). ๋”ฐ๋ผ์„œ,

int func(char array[]);
int func(char *array);
int func(char array[10]);
int func(char array[20]);

์œ„์˜ ๋ชจ๋“  ํ•จ์ˆ˜์›ํ˜•์„ ์–ธ์€ ํ˜ธํ™˜๋˜๋ฉฐ ๊ฐ™์€ composite type ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

์ด์™ธ์—๋„, ๋งŒ๋“ค๋ ค๊ณ  ๋งˆ์Œ๋งŒ ๋จน์œผ๋ฉด ๋ช‡๊ฐœ์˜ ์ƒํ™ฉ์ด๋ผ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š”
์ด๋Ÿฌํ•œ ๊ฒƒ๋“ค์„ case by case ๋กœ ํ•ด๊ฒฐํ•˜๋ ค๊ณ  ํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. (์ด
์ด์•ผ๊ธฐ๋Š” ํ•จ์ˆ˜ํ˜•๊ณผ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ํ•˜๋ฉด์„œ๋„ ๋‚˜์™”๋˜ ๋ง์ธ ๊ฒƒ ๊ฐ™
๊ตฐ์š”) C type ์ฒด๊ณ„์— ๋Œ€ํ•œ ์ „์ฒด์ ์ธ ์ดํ•ด์™€ ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ์˜ ์ •ํ™•ํ•œ type
๊ตฌ๋ถ„๋งŒ ์ด๋ฃจ์–ด์ง„๋‹ค๋ฉด, ์œ„์™€ ๊ฐ™์€ ์ƒํ™ฉ์€ "์ผ€์žŒ ํ•œ์กฐ๊ฐ" ^^ ์ž…๋‹ˆ๋‹ค.

>
>์–ด๋–ป๊ฒŒ ๊ณต๋ถ€ํ•˜์‹œ๋‚˜์š”? ์‹œ์ค‘์— ๋‚˜์˜จ ์ผ๋ฐ˜์ ์ธ C ์ฑ…์—๋Š” ์ €์˜ ๋ฌผ์Œ์— ๋Œ€๋‹ตํ•ด ์ค„ ์ˆ˜
>์žˆ๋Š”
>์ฑ…์„ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. (๋ฌผ๋ก  ์ œ๊ฐ€ ์ฐพ์ง€ ๋ชปํ•ด์„œ ๊ทธ๋Ÿด์ˆ˜๋„ ์žˆ์ง€๋งŒ.. ^^;;)

์˜ˆ, ๋‹˜์ด ์ฐพ์ง€ ๋ชปํ•œ ๊ฒƒ์ด์ง€์š”. :)
๋Œ€๋ถ€๋ถ„์˜ ์ฑ…๋“ค ์—ญ์‹œ ์–ด์„คํ”„๊ฒŒ ๊ณต๋ถ€ํ•œ ์‚ฌ๋žŒ๋“ค์ด ์จ๋‚ด์„œ ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

>
>C์–ธ์–ด ํ‘œ์ค€ ๋ฌธ์„œ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ๋ณด์‹œ๋ฉด์„œ ์Šต๋“ํ•˜์‹ ๊ฑด๊ฐ€์š”?
>

C ํ‘œ์ค€ ๋ฌธ์„œ๋Š” ๋ฌผ๋ก  ์ด๋ฅผ ๊ฐ€์žฅ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•˜๊ณ  ์žˆ์ง€๋งŒ, ๋งค์šฐ ๊ธฐ์ˆ ์ ์ธ
๋ฌธ์„œ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๋‹จ์ˆœํžˆ ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ์˜ ๊ด€๊ณ„๋งŒ์„ ํ•™์Šตํ•˜๊ธฐ ์œ„ํ•ด ํ•ด์„ํ•˜
๊ธฐ ์–ด๋ ต๊ณ  ๋‚ด์šฉ๋„ ๋ฐฉ๋Œ€ํ•œ ํ‘œ์ค€์„ ๋ณธ๋‹ค๋Š” ๊ฒƒ์€ ๋‚ญ๋น„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜๋Š”
comp.lang.c ๊ทธ๋ฃน์˜ ๊ณต์‹ FAQ (์ž์ฃผ ๋ฌผ์–ด๋ณด๋Š” ์งˆ๋ฌธ๋“ค) ์ž…๋‹ˆ๋‹ค. ๋‚ด์šฉ์ค‘ ๋‹˜์ด
๊ถ๊ธˆํ•ด ํ•˜์‹œ๋Š” ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ์˜ ๊ด€๊ณ„์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃฌ ๋ถ€๋ถ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ 
ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. (๋ฌผ๋ก , ์˜๋ฌธ์ž…๋‹ˆ๋‹ค. ํ•œ๊ธ€ ๋ฒ„์ ผ๋„ ์žˆ์ง€๋งŒ, ์ €๋Š” ์ถ”์ฒœํ•˜์ง€
๋Š” ์•Š์Šต๋‹ˆ๋‹ค - ๋ณด๊ณ  ์•ˆ๋ณด๊ณ ๋Š” ์ž์œ ๊ฒ ์ง€๋งŒ...)

http://www.eskimo.com/~scs/C-faq/top.html

๊ทธ๋Ÿผ...

ebazy

unread,
Apr 6, 2001, 2:51:20โ€ฏAM4/6/01
to
์Œ.. ์ข‹์€ ๋ง์”€ ๋งŽ์ด ๋“ค์–ด ๊ณ ๋ง™์Šต๋‹ˆ๋‹ค.

[์งˆ๋ฌธ 1]๊ณผ ๊ด€๊ณ„๋œ ๋ง๋“ค


> ๋ผ์ธ 1: char *p1 = "1234567890";
>

> ๋ผ์ธ 2: char *p1;


> p1 = malloc( 10 );
> p1 = "1234567890";

๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์ ˆ๋Œ€๋กœ ์—๋Ÿฌ๊ฐ€ ๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฑด String์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•œ
๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆผ์„ ๊ทธ๋ ค๋ณด์‹œ๋ฉด ์‰ฝ๊ฒŒ ์•„์‹ค ๊ฒ๋‹ˆ๋‹ค.
(๊ทธ๋ฆผ์„ ์•„์Šคํ‚ค๋กœ........... --; ์ƒ๋žต)
๊ทธ๋Ÿฐ๋ฐ... ๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ๋žŒ๋“ค์ด ์•Œ๋ฉด์„œ๋„ ์‹ค์ˆ˜ ํ•˜๋Š” ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.
[error code]
int *p1;
*p1=100;
๊ฐ€์žฅ ์œ„ํ—˜ํ•˜๋ฉด์„œ๋„ ๋น ์ง€๊ธฐ ์‰ฌ์šด ์˜ค๋ฅ˜... ์ด๊ฑธ ๊ทธ๋ฆผ์œผ๋กœ.............ํ• ๊นŒ๋‚˜?
์Œ................ ์ฃ„์†ก...
๊ทธ๋ฆผ์ด ํž˜๋“  ๊ด€๊ณ„๋กœ ๋ฐ”๋ฅธ ์ฝ”๋“œ๋ฅผ ์จ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ฃ„์†ก
[correct code]
int x, *p1;
p&=x; file://memory allocation
*p=100;
์ด์™€๊ฐ™์ธ ์ฃผ์†Œ๋ฅผ referencingํ•œ ํ›„ ๊ฐ’์„ ์ง‘์–ด๋„ฃ์–ด์ฃผ๋Š” ์Šต๊ด€์„ ๊ธธ๋Ÿฌ์ฃผ์‹ญ์‹œ์˜ค.

[์งˆ๋ฌธ 2]์™€ ๊ด€๊ณ„๋œ ๋ง๋“ค
C์—์„œ ์ง€์›ํ•˜๋Š” SemiDynamic Array - int p[]-๋ฅผ ์–ด๋–ป๊ฒŒ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์–ด๋–ป๊ฒŒ
์ธ์‹ํ• ๊นŒ์š”?
๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์•„๋ฌด์ƒ๊ฐ์—†์ด int p[]๋ฅผ int *p ์„ ์–ธ์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
(์–ด๋–ค ์ฑ…์„ ์ฐธ์กฐํ•˜์…”๋„ ๋ ๊ฒ๋‹ˆ๋‹ค. Neill Graham์ด ์“ด ์ฑ…์„ ๋ณด์‹ญ์‹œ์˜ค). ๋”ฐ๋ผ์„œ int
p[]๋‚˜ int *p๋‚˜ ๊ฐ™์€ ๋ง์ž…๋‹ˆ๋‹ค.
์‚ฌ์‹ค incomplete array type ๋น„์™„์„ฑ ๋ฐฐ์—ด(?)์ด๋ผ๋Š” ๊ฒƒ์€ ๊ทธ ์‹œ์ ์—์„œ๋Š” Array๊ฐ€
์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์ฃผ์˜ํ•˜์‹ญ์‹œ์˜ค. ์ €๋Š” ๋ฐฐ์—ด์ด ๋œ ์‹œ์ ์—์„œ ๋“œ๋ฆฐ ์ด์•ผ๊ธฐ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.


Kim, Sung-Ryong

unread,
Apr 6, 2001, 3:09:16โ€ฏAM4/6/01
to
"kuru" <evi...@catholic.or.kr> wrote in message
news:tUIy6.360$2b5....@news2.bora.net...

> ๋‹ต๋ณ€ ์ •๋ง ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
>
> ๊ทธ๋Ÿฐ๋ฐ ํ•œ๊ฐ€์ง€ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
>
> ๋‹˜์˜ ๋ง์”€์ค‘์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ง์ด ์žˆ์Šต๋‹ˆ๋‹ค.
>
> > > ๋ผ์ธ 3: char p2[];
> > > ๋ผ์ธ 4: char *p2;
> >
> > ์ „ํ˜€ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค. 1์—์„œ p1์€ ๋ฌธ์ž ๋ฐฐ์—ด์ด๊ณ , 2์—์„œ๋Š” ๋ฌธ์ž
> ํฌ์ธํ„ฐ์ž…๋‹ˆ๋‹ค.
> >๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ๋Š” ๊ฐ™์€ semantics๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์œผ๋‚˜, ์ „ํ˜€ ๋‹ค๋ฅธ
> >semantics๋ฅผ ๋ณด์ด๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋‘˜์€ ๊ฐ™์€ ๊ฒƒ์œผ๋กœ ์ดํ•ดํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€
> >๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.
>
> ๋ฌธ์ž๋ฐฐ์—ด๊ณผ ๋ฌธ์ž ํฌ์ธํ„ฐ๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š”๊ฒƒ์€ ์–ด๋””์„œ ๋“ค์€ ๊ธฐ์–ต์ด ๋‚˜๋Š”๋ฐ..
>
> ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ๊ฑด์ง€ ์ข€๋” ์ž์„ธํ•˜๊ฒŒ ๋ง์”€ํ•ด์ฃผ์‹ค์ˆ˜ ์žˆ๋‚˜์š”? ์ œ๊ฐ€ ์ด์ œ๊นŒ์ง€
> ์‚ฌ์šฉํ•œ๊ฒƒ๋“ค์€
>
> ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‚˜ ๊ฐœ๋…์ด ๋„ˆ๋ฌด๋‚˜๋„ ๋™์ผํ•ด์„œ ์ €๋Š” ํฌ์ธํ„ฐ์™€ ๋ฐฐ์—ด์„ ๊ฑฐ์˜
> ๋™์ผํ•˜๊ฒŒ
>
> ๊ฐ„์ฃผํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋„๋Œ€์ฒด ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌ๋˜๊ธธ๋ž˜ ๋‹ค๋ฅด๋‹ค๊ณ  ๋ง์”€ํ•˜์‹œ๋Š” ๊ฑด๊ฐ€์š”?
>
>
> ์œ„์˜ ์งˆ๋ฌธ์„ ์จ ๋†“๊ณ  ๋ณด๋‹ˆ ์ œ ๊ธ€์ด ์ƒ๋‹นํžˆ ๊ณต๊ฒฉ์ ์ธ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋„ค์š”..
>
> ์šฉ์„œํ•˜์‹œ๊ตฌ์š”. ^^
>
> ์˜๋„ํ•œ๊ฑด ์•„๋‹ˆ๊ตฌ์š”.. ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ํ•  ๋ฐฉ๋ฒ•์ด ์—†๋„ค์š”. ^^;;;

์ €๋„ ๊ณต๋ถ€ํ•˜๋Š” ์˜๋ฏธ์—์„œ array์™€ pointer๊ฐ€ ๊ฐ™์„ ๋•Œ์™€ ๋‹ค๋ฅผ ๋•Œ๋ฅผ ์ •๋ฆฌํ•ด ๋ณด๋„๋ก
ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

- array์™€ pointer๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ

1. expression ์•ˆ์˜ array ์ด๋ฆ„์€ ๊ทธ array์˜ ์ฒซ๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋กœ
์ทจ๊ธ‰๋œ๋‹ค.

์˜ˆ1)

int a[10], *p;

p = a;

2. array์˜ ์ฒจ์ž(subscript)๋Š” ํฌ์ธํ„ฐ ์˜คํ”„์…‹๊ณผ ๋™์ผํ•˜๋‹ค.

์˜ˆ2)

int a[10], *p, i;

p = a;

for (i = 0; i < 10; i++) a[i] = 0;
for (i = 0; i < 10; i++) p[i] = 0;
for (i = 0; i < 10; i++) *(p+i) = 0;
for (i = 0; i < 10; i++) *p++ = 0;

์œ„์— ์žˆ๋Š” ๋„ค๊ฐœ์˜ for ๋ฌธ์€ ๋ชจ๋‘ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. (๋ฌผ๋ก  ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€
๋งŒ๋“  ์ฝ”๋“œ๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค๋งŒ)

3. ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์„ ์–ธ๋œ array ์ด๋ฆ„์€ ๊ทธ array์˜ ์ฒซ๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ๊ฐ€๋ฆฌํ‚ค๋Š”
ํฌ์ธํ„ฐ๋กœ ์ทจ๊ธ‰๋œ๋‹ค.

์˜ˆ3)

void func(int *para) {}
void func(int para[]) {}
void func(int para[100]) {}

์„ธ๊ฐœ์˜ ํ•จ์ˆ˜ ์ •์˜ ๋ชจ๋‘๊ฐ€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

- array์™€ pointer๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ

์›๋ž˜ type ์ž์ฒด๊ฐ€ ํ‹€๋ฆฌ๋ฏ€๋กœ ์œ„์˜ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋‘˜์€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค๋งŒ,
(๋ฌผ๋ก  ํ˜„์‹ค์—์„œ๋Š” ์œ„์˜ ๊ฒฝ์šฐ๋“ค์ด ๋Œ€๋ถ€๋ถ„์ด์ง€๋งŒ ^^) ๊ฐ€์žฅ ๋งŽ์ด ํ‹€๋ฆฌ๋Š” ๋ถ€๋ถ„๋งŒ ์ข€
์ ์–ด๋ณด๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

1. array ์ด๋ฆ„์€ l-value๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ unmodifiable์ด๋‹ค.

์˜ˆ4)

int a[10], *p;

a = p; /* ์ด๋Ÿฐ ์ผ์„ ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. */

2. referencing

์–ด๋ ˆ์ด์˜ ์œ„์น˜๋Š” ์ปดํŒŒ์ผ์„ ํ•  ๋•Œ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์–ด๋ ˆ์ด์˜ ์–ด๋–ค ์š”์†Œ๋ฅผ
์ฝ์–ด์˜ค๊ธฐ ์œ„ํ•ด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์–ด๋ ˆ์ด ์œ„์น˜๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ
ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์„ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” indirect referencing์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ5)

char a[10] = "123456789";
char *p = "123456789";
char c;

(5-1) c = p[4];
(5-2) c = a[4];

(5-1)์˜ ๊ฒฝ์šฐ์—๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋Š” p์˜ ์œ„์น˜๋งŒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (์˜ˆ๋ฅผ ๋“ค์–ด
4000๋ฒˆ์ง€๋ผ๊ณ  ํ•˜์ง€์š”) 1) ๋จผ์ € 4000 ๋ฒˆ์ง€์— ์ €์žฅ๋œ ๊ฐ’์„ ์ฝ์–ด์˜ต๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ์ด
ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฉ”๋ชจ๋ฆฌ ์œ„์น˜์ž…๋‹ˆ๋‹ค. (์˜ˆ๋ฅผ ๋“ค์–ด 5000๋ฒˆ์ง€๋ผ๊ณ  ํ•˜์ง€์š”) 2)
๋‹ค์Œ์œผ๋กœ 5000์— 4๋ฅผ ๋”ํ•ด 5004๋ฅผ ๋งŒ๋“ค๊ณ , 3) ๋งˆ์ง€๋ง‰์œผ๋กœ 5004 ๋ฒˆ์ง€์— ์ €์žฅ๋œ
๊ฐ’์„ ์ฝ์–ด๋‹ค c์— ๋„ฃ์Šต๋‹ˆ๋‹ค.

(5-2)์˜ ๊ฒฝ์šฐ์—๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ a์˜ ์œ„์น˜๋ฅผ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (์˜ˆ๋ฅผ ๋“ค์–ด
4500๋ฒˆ์ง€๋ผ๊ณ  ํ•˜์ง€์š”) 1) 4500์— 4๋ฅผ ๋”ํ•ด 4504๋ฅผ ๋งŒ๋“ค๊ณ , 2) 4504 ๋ฒˆ์ง€์— ์žˆ๋Š”
๊ฐ’์„ ์ฝ์–ด๋‹ค c์— ๋„ฃ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ ˆํผ๋Ÿฐ์‹ฑ์˜ ์ฐจ์ด๋กœ ์ธํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ์‹คํ–‰์‹œ ์˜ค๋ฅ˜๋ฅผ ๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ6)

file A:
int a[10];

file B:
extern int *a;
int c;
c = a[10];

>
> ----
>
> ๊ธ€๊ตฌ ์ €๋„ ์ƒ๋‹นํžˆ ์˜ค๋žœ๊ธฐ๊ฐ„(์ง์žฅ์€ ์•ˆ๋‹ค๋…”์ง€๋งŒ) ํ”„๋กœ๊ทธ๋žจ์„ ๊ณต๋ถ€ํ–ˆ๋‹ค๊ณ 
> ์ƒ๊ฐํ•˜๋Š”๋ฐ
>
> ์•„์ง๋„ ์ด๋Ÿฐ ๋ฌธ์ œ์— ๋ถ€๋”ซํžˆ๋ฉด ๋จธ๊ฐ€๋จผ์ง€ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹˜์€ ๋„๋Œ€์ฒด C์–ธ์–ด๋ฅผ
>
> ์–ด๋–ป๊ฒŒ ๊ณต๋ถ€ํ•˜์‹œ๋‚˜์š”? ์‹œ์ค‘์— ๋‚˜์˜จ ์ผ๋ฐ˜์ ์ธ C ์ฑ…์—๋Š” ์ €์˜ ๋ฌผ์Œ์— ๋Œ€๋‹ตํ•ด ์ค„
์ˆ˜
> ์žˆ๋Š”
>
> ์ฑ…์„ ๋ณด์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. (๋ฌผ๋ก  ์ œ๊ฐ€ ์ฐพ์ง€ ๋ชปํ•ด์„œ ๊ทธ๋Ÿด์ˆ˜๋„ ์žˆ์ง€๋งŒ.. ^^;;)
>
> C์–ธ์–ด ํ‘œ์ค€ ๋ฌธ์„œ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ๋ณด์‹œ๋ฉด์„œ ์Šต๋“ํ•˜์‹ ๊ฑด๊ฐ€์š”?
>
>

ํ‘œ์ค€ ๋ฌธ์„œ๋ฅผ ๋ณด๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” ์ž˜ ๋œ ์ฑ…์„ ๋ณด์‹œ๋Š”๊ฒŒ ๋” ๋‚ณ์„ ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค. ํ‘œ์ค€
๋ฌธ์„œ๋ผ๋Š” ๊ฒŒ ๋ฌด์Šจ ๋ฒ•์ „ ๊ฐ™์€ ๊ฒƒ์ด๋ผ ๋”ฑ๋”ฑํ•˜๊ณ  ์žฌ๋ฏธ์—†๊ณ  ์ดํ•ดํ•˜๊ธฐ๋„ ์–ด๋ ต๊ฑฐ๋“ ์š”.
์•„๋งˆ๋„ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ ๋งŒ๋“ค๊ฑฐ๋‚˜ ์–ธ์–ด์— ์•„์ฃผ ๊ด€์‹ฌ์ด ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด๋‚˜ ๋ณด๋Š” ๊ฒŒ
์•„๋‹๊นŒ์š”? ์ œ ์ƒ๊ฐ์—” ๋ฌด์Šจ ๋งˆ๋ฒ•๊ณผ ๊ฐ™์€ ์ฑ…์ด ์žˆ์–ด์„œ ๋‹˜๊ป˜์„œ ๊ถ๊ธˆํ•ด ํ•˜์‹œ๋Š” ๊ฑธ ๋‹ค
์„ค๋ช…ํ•ด ์ค„ ์ˆ˜๋Š” ์—†์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ๋ถ„๋“ค์ด ์ถ”์ฒœํ•˜์‹œ๋Š” ์ข‹์€ ์ฑ…์„ ์ฝ์–ด
์†Œํ™”ํ•˜์‹œ๊ณ , ๊ฑฐ๊ธฐ์— ์„ค๋ช…์ด ์—†๋Š” ๊ฒƒ์€ ๊ณ ๋ฏผํ•˜๊ณ  ๋ฌผ์–ด๋ณด์‹œ๋Š” ๊ฒŒ ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ผ
๊ฑฐ๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Kim, Sung-Ryong

unread,
Apr 6, 2001, 3:23:08โ€ฏAM4/6/01
to
"ebazy" <ban...@postech.ac.kr> wrote in message
news:9ajocp$5uh$1...@news1.kornet.net...

> ์Œ.. ์ข‹์€ ๋ง์”€ ๋งŽ์ด ๋“ค์–ด ๊ณ ๋ง™์Šต๋‹ˆ๋‹ค.
>...
> [์ค‘๋žต]
>...

> [์งˆ๋ฌธ 2]์™€ ๊ด€๊ณ„๋œ ๋ง๋“ค
> C์—์„œ ์ง€์›ํ•˜๋Š” SemiDynamic Array - int p[]-๋ฅผ ์–ด๋–ป๊ฒŒ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์–ด๋–ป๊ฒŒ
> ์ธ์‹ํ• ๊นŒ์š”?
> ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์•„๋ฌด์ƒ๊ฐ์—†์ด int p[]๋ฅผ int *p ์„ ์–ธ์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
> (์–ด๋–ค ์ฑ…์„ ์ฐธ์กฐํ•˜์…”๋„ ๋ ๊ฒ๋‹ˆ๋‹ค. Neill Graham์ด ์“ด ์ฑ…์„ ๋ณด์‹ญ์‹œ์˜ค). ๋”ฐ๋ผ์„œ
int
> p[]๋‚˜ int *p๋‚˜ ๊ฐ™์€ ๋ง์ž…๋‹ˆ๋‹ค.

์œ„์—์„œ ๋ง์”€ํ•˜์‹  ๊ฒƒ์€ function์˜ formal parameter๋กœ ์‚ฌ์šฉ๋  ๋•Œ๋งŒ ์ฐธ์ž…๋‹ˆ๋‹ค.

> ์‚ฌ์‹ค incomplete array type ๋น„์™„์„ฑ ๋ฐฐ์—ด(?)์ด๋ผ๋Š” ๊ฒƒ์€ ๊ทธ ์‹œ์ ์—์„œ๋Š” Array๊ฐ€
> ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์ฃผ์˜ํ•˜์‹ญ์‹œ์˜ค. ์ €๋Š” ๋ฐฐ์—ด์ด ๋œ ์‹œ์ ์—์„œ ๋“œ๋ฆฐ ์ด์•ผ๊ธฐ๊ฐ€
์•„๋‹™๋‹ˆ๋‹ค.

array ์ด๋ฆ„์ด pointer๋กœ ์“ฐ์ผ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ํ•œ ๋ฒˆ ๋ฐ”๋€Œ๊ณ  ๋‚˜๋ฉด ๋‹ค์‹œ
array๋กœ ๋Œ์•„์˜ฌ ์ˆ˜ ์—†์ง€ ์•Š์Šต๋‹ˆ๊นŒ? incomplete array๊ฐ€ pointer๋กœ ๋ณ€ํ™”ํ•˜์˜€๋‹ค๊ฐ€,
๋‹ค์‹œ ์–ด๋А์‹œ์ ์— array๊ฐ€ ๋œ๋‹ค๋Š” ๊ฒƒ์€ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šด ๋ง์”€์ด๊ตฐ์š”. ์ข€ ๋” ์„ค๋ช…์ด
ํ•„์š”ํ•˜์ง€ ์•Š์„๊นŒ์š”?

myco...@hanmail.net

unread,
Apr 6, 2001, 4:28:04โ€ฏAM4/6/01
to
>์Œ.. ์ข‹์€ ๋ง์”€ ๋งŽ์ด ๋“ค์–ด ๊ณ ๋ง™์Šต๋‹ˆ๋‹ค.
>
[...]

>
>[์งˆ๋ฌธ 2]์™€ ๊ด€๊ณ„๋œ ๋ง๋“ค
>C์—์„œ ์ง€์›ํ•˜๋Š” SemiDynamic Array - int p[]-๋ฅผ ์–ด๋–ป๊ฒŒ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์–ด๋–ป๊ฒŒ
>์ธ์‹ํ• ๊นŒ์š”?

C ์—๋Š” SemiDynamic Array ๋ผ๋Š” ๊ฒƒ์ด ์—†์Šต๋‹ˆ๋‹ค. ํŠน์ • implementation ์—์„œ
ํ™•์žฅ์œผ๋กœ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ํ‘œ์ค€ C ์—์„œ int p[] ๋Š” incomplete type
์„ ๊ฐ–๋Š” ๋ฐฐ์—ด์ผ ๋ฟ์ž…๋‹ˆ๋‹ค.

>๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์•„๋ฌด์ƒ๊ฐ์—†์ด int p[]๋ฅผ int *p ์„ ์–ธ์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

์ ˆ๋Œ€๋กœ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠน์ • implementation ์˜ ํ™•์žฅ์„ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ๋กœ
๊ธฐ์ˆ ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

>(์–ด๋–ค ์ฑ…์„ ์ฐธ์กฐํ•˜์…”๋„ ๋ ๊ฒ๋‹ˆ๋‹ค. Neill Graham์ด ์“ด ์ฑ…์„ ๋ณด์‹ญ์‹œ์˜ค). ๋”ฐ๋ผ์„œ int
>p[]๋‚˜ int *p๋‚˜ ๊ฐ™์€ ๋ง์ž…๋‹ˆ๋‹ค.

์ ˆ๋Œ€๋กœ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ € ์•„๋ž˜ ์ด์™€ ๊ด€๋ จํ•ด ์ด๋ฏธ ๋งŽ์€ ๋ถ„๋“ค์ด ๊ทธ๋ ‡์ง€
์•Š๋‹ค๊ณ  ์—ด์‹ฌํžˆ ์„ค๋ช…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ์ฝ์–ด๋ณด์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

>์‚ฌ์‹ค incomplete array type ๋น„์™„์„ฑ ๋ฐฐ์—ด(?)์ด๋ผ๋Š” ๊ฒƒ์€ ๊ทธ ์‹œ์ ์—์„œ๋Š” Array๊ฐ€
>์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์ฃผ์˜ํ•˜์‹ญ์‹œ์˜ค. ์ €๋Š” ๋ฐฐ์—ด์ด ๋œ ์‹œ์ ์—์„œ ๋“œ๋ฆฐ ์ด์•ผ๊ธฐ๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.
>

๊ทธ ์‹œ์ ์—์„œ๋„ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค. ์ฆ‰ incomplete type ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ์ฒด์  ํฌ๊ธฐ๋ฅผ
ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ๊ณณ์—์„œ ๋ฐฐ์—ด๋กœ์„œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (C ์—์„œ๋Š” ์ฒจ
์ž์—ฐ์‚ฐ ์—ญ์‹œ ํฌ์ธํ„ฐ๋กœ ์ •์˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค)

์ œ ์ƒ๊ฐ์— ๋‹˜์€ C ์˜ ํŠน์ • ํ™•์žฅ์œผ๋กœ ์ธํ•ด ํ‘œ์ค€ C ์˜ ์˜ฌ๋ฐ”๋ฅธ ์ •์˜์™€
semantic ์„ ๋ฐ›์•„๋“ค์ด์ง€ ๋ชปํ•˜๊ณ  ๊ณ„์‹ ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค. ํ™•์žฅ์ด ์•„๋‹Œ, ํ‘œ์ค€ C ์–ธ์–ด
๋ฅผ ๊ธฐ์ˆ ํ•œ ์ฑ…์œผ๋กœ ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ์˜ ๊ด€๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜์‹œ๋Š” ๊ฒƒ์ด ์ข‹์„ ๋“ฏ
์‹ถ์Šต๋‹ˆ๋‹ค. (clc FAQs ๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค)

myco...@hanmail.net

unread,
Apr 6, 2001, 4:55:37โ€ฏAM4/6/01
to
>"ebazy" <ban...@postech.ac.kr> wrote in message
>news:9ajocp$5uh$1...@news1.kornet.net...
[...]

>> ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์•„๋ฌด์ƒ๊ฐ์—†์ด int p[]๋ฅผ int *p ์„ ์–ธ์œผ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
>> (์–ด๋–ค ์ฑ…์„ ์ฐธ์กฐํ•˜์…”๋„ ๋ ๊ฒ๋‹ˆ๋‹ค. Neill Graham์ด ์“ด ์ฑ…์„ ๋ณด์‹ญ์‹œ์˜ค). ๋”ฐ๋ผ์„œ
>int
>> p[]๋‚˜ int *p๋‚˜ ๊ฐ™์€ ๋ง์ž…๋‹ˆ๋‹ค.
>
>์œ„์—์„œ ๋ง์”€ํ•˜์‹  ๊ฒƒ์€ function์˜ formal parameter๋กœ ์‚ฌ์šฉ๋  ๋•Œ๋งŒ ์ฐธ์ž…๋‹ˆ๋‹ค.
>
>> ์‚ฌ์‹ค incomplete array type ๋น„์™„์„ฑ ๋ฐฐ์—ด(?)์ด๋ผ๋Š” ๊ฒƒ์€ ๊ทธ ์‹œ์ ์—์„œ๋Š” Array๊ฐ€
>> ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์ฃผ์˜ํ•˜์‹ญ์‹œ์˜ค. ์ €๋Š” ๋ฐฐ์—ด์ด ๋œ ์‹œ์ ์—์„œ ๋“œ๋ฆฐ ์ด์•ผ๊ธฐ๊ฐ€
>์•„๋‹™๋‹ˆ๋‹ค.
>
>array ์ด๋ฆ„์ด pointer๋กœ ์“ฐ์ผ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ํ•œ ๋ฒˆ ๋ฐ”๋€Œ๊ณ  ๋‚˜๋ฉด ๋‹ค์‹œ
>array๋กœ ๋Œ์•„์˜ฌ ์ˆ˜ ์—†์ง€ ์•Š์Šต๋‹ˆ๊นŒ? incomplete array๊ฐ€ pointer๋กœ ๋ณ€ํ™”ํ•˜์˜€๋‹ค๊ฐ€,
>๋‹ค์‹œ ์–ด๋А์‹œ์ ์— array๊ฐ€ ๋œ๋‹ค๋Š” ๊ฒƒ์€ ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šด ๋ง์”€์ด๊ตฐ์š”. ์ข€ ๋” ์„ค๋ช…์ด
>ํ•„์š”ํ•˜์ง€ ์•Š์„๊นŒ์š”?

ebazy ๋‹˜์€ ํŠน์ • implementation ์˜ ํ™•์žฅ์œผ๋กœ ์ธํ•ด incomplete array ์— ๋Œ€
ํ•ด์„œ ์˜คํ•ด๋ฅผ ํ•˜๊ณ  ๊ณ„์‹ญ๋‹ˆ๋‹ค. ํ‘œ์ค€ C ์–ธ์–ด๋ฅผ ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์˜ฌ๋ฐ”๋ฅธ ์„ค๋ช…์ด ์•„๋‹™
๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ , C99 ํ‘œ์ค€์—์„œ๋Š” C90 ๊ณผ๋Š” ๋‹ฌ๋ฆฌ variable-size array ๋ผ๋Š” ๊ฒƒ์„ ์ง€
์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐœ๋…์ƒ ebazy ๋‹˜์˜ SemiDynamic array ํ•˜๊ณ  ์œ ์‚ฌํ• ์ง€ ๋ชจ๋ฅด
์ง€๋งŒ, ๊ทธ ์„ ์–ธ๋ฐฉ๋ฒ•๊ณผ ์ •์˜๋œ ํ–‰๋™์˜ ๊ฒฉ์ด ์™„์ „ํžˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

myco...@hanmail.net

unread,
Apr 6, 2001, 4:50:42โ€ฏAM4/6/01
to
>"kuru" <evi...@catholic.or.kr> wrote in message
>news:tUIy6.360$2b5....@news2.bora.net...
[...]

>์ €๋„ ๊ณต๋ถ€ํ•˜๋Š” ์˜๋ฏธ์—์„œ array์™€ pointer๊ฐ€ ๊ฐ™์„ ๋•Œ์™€ ๋‹ค๋ฅผ ๋•Œ๋ฅผ ์ •๋ฆฌํ•ด ๋ณด๋„๋ก
>ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
>
>- array์™€ pointer๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ
>
>1. expression ์•ˆ์˜ array ์ด๋ฆ„์€ ๊ทธ array์˜ ์ฒซ๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋กœ
>์ทจ๊ธ‰๋œ๋‹ค.

๋ฌผ๋ก  sizeof ์—ฐ์‚ฐ์ž๋‚˜ ๋‹จํ•ญ & ์—ฐ์‚ฐ์ž์˜ ํ”ผ์—ฐ์‚ฐ์ž์ธ ๊ฒฝ์šฐ์—๋Š” decay ํ•˜์ง€ ์•Š
์Šต๋‹ˆ๋‹ค.

>
>์˜ˆ1)
>
>int a[10], *p;
>p = a;
>
>2. array์˜ ์ฒจ์ž(subscript)๋Š” ํฌ์ธํ„ฐ ์˜คํ”„์…‹๊ณผ ๋™์ผํ•˜๋‹ค.

a[i] ๋Š” ์ •์˜ ์ž์ฒด๊ฐ€ *((p)+(i)) ์ž…๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ ์˜คํ”„์…‹์ด๋ž€ ๊ฒฐ๊ตญ ๋Œ€์ƒ์ฒด
ํฌ์ธํ„ฐ (pointer to object type) ์™€ ์ •์ˆ˜์˜ +, - ์—ฐ์‚ฐ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋ฐฐ์—ด
์ฒจ์ž ์—ญ์‹œ (๋‹จ์ˆœํ•œ ์„ค๋ช…์ด ์•„๋‹Œ) ์–ธ์–ด์  ์ •์˜ ์ž์ฒด๊ฐ€ ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์œผ๋กœ ์ •์˜
๋˜๊ธฐ์— ๋‘˜ ์‚ฌ์ด์˜ ๊ตฌ๋ถ„์€ ์ „ํ˜€ ํ•„์š”์—†์Šต๋‹ˆ๋‹ค. - ๋‹ค๋งŒ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์˜๋„๋ฅผ
ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•  ๋ฟ์ž…๋‹ˆ๋‹ค.

>์˜ˆ2)
>
>int a[10], *p, i;
>p = a;
>
>for (i = 0; i < 10; i++) a[i] = 0;
>for (i = 0; i < 10; i++) p[i] = 0;
>for (i = 0; i < 10; i++) *(p+i) = 0;
>for (i = 0; i < 10; i++) *p++ = 0;
>
>์œ„์— ์žˆ๋Š” ๋„ค๊ฐœ์˜ for ๋ฌธ์€ ๋ชจ๋‘ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. (๋ฌผ๋ก  ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€
>๋งŒ๋“  ์ฝ”๋“œ๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค๋งŒ)

C ์˜ ์–ธ์–ด์  ์ •์˜๋Š” actual machine ์ด ์•„๋‹Œ abstract machine ์ด๋ฏ€๋กœ, ์ปด
ํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋งŒ๋“œ๋Š” ์ฝ”๋“œ๋Š” (C ์–ธ์–ด์˜ ์ž…์žฅ์—์„œ๋Š”) ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ
๊ทธ๋Ÿฌํ•œ ์ •์˜๊ฐ€ ์š”๊ตฌํ•˜๋Š” ํ–‰๋™์ด ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒƒ์ฒ˜๋Ÿผ (as if) ํ•ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด
๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ์œ„์˜ 4๊ฐœ์˜ for ๋ฌธ์ค‘ ๋งˆ์ง€๋ง‰ for ๋ฌธ์€ ์œ„์˜ 3๊ฐœ์™€ ๊ฒฐ๊ณผ๋กœ ๋‚˜์˜ค๋Š” ํ–‰๋™
์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. (p ์˜ ๊ฐ’์ด ๋ณ€ํ•˜๊ฒ ์ง€์š”)

>3. ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์„ ์–ธ๋œ array ์ด๋ฆ„์€ ๊ทธ array์˜ ์ฒซ๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ๊ฐ€๋ฆฌํ‚ค๋Š”
>ํฌ์ธํ„ฐ๋กœ ์ทจ๊ธ‰๋œ๋‹ค.

์•„๋ž˜ ์„ค๋ช…์€ ๋งž๋Š” ๋ง์ด์ง€๋งŒ, ์ด ์„ค๋ช…์€ ์กฐ๊ธˆ ํ‹€๋ฆฝ๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜ ์„ ์–ธ์€ ์–ด
๋””๊นŒ์ง€๋‚˜ ๋ช…์นญ์— ๋Œ€ํ•œ type ์˜ ์„ ์–ธ์ž…๋‹ˆ๋‹ค. ์„ ์–ธ์—์„œ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๊ฐ€๋ฅดํ‚ค
๊ณ  ์•ˆ ๊ฐ€๋ฅดํ‚ค๊ณ ๋“ฑ์˜ ๋ฌธ์ œ๋Š” ์ƒ๊ด€์ด ์—†์Šต๋‹ˆ๋‹ค. ์ข€ ๋” ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด,
"ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์„ ์–ธ๋œ "์˜ฌ๋ฐ”๋ฅธ" (-> ์ž๊พธ ๊ฐ•์กฐํ•˜๋Š” ์ด์œ ๋ฅผ ์•„์‹œ๊ฒ ์Šต๋‹ˆ
๊นŒ?) ๋ฐฐ์—ดํ˜• (array of type) ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํฌ์ธํ„ฐํ˜• (pointer to type)
์œผ๋กœ ๋‹ค์‹œ ์“ฐ์—ฌ์ง‘๋‹ˆ๋‹ค (rewrite)." ๊ฒ ์ง€์š”.

>์˜ˆ3)
>
>void func(int *para) {}
>void func(int para[]) {}
>void func(int para[100]) {}
>
>์„ธ๊ฐœ์˜ ํ•จ์ˆ˜ ์ •์˜ ๋ชจ๋‘๊ฐ€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
>
>- array์™€ pointer๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ
>
>์›๋ž˜ type ์ž์ฒด๊ฐ€ ํ‹€๋ฆฌ๋ฏ€๋กœ ์œ„์˜ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋‘˜์€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค๋งŒ,
>(๋ฌผ๋ก  ํ˜„์‹ค์—์„œ๋Š” ์œ„์˜ ๊ฒฝ์šฐ๋“ค์ด ๋Œ€๋ถ€๋ถ„์ด์ง€๋งŒ ^^) ๊ฐ€์žฅ ๋งŽ์ด ํ‹€๋ฆฌ๋Š” ๋ถ€๋ถ„๋งŒ ์ข€
>์ ์–ด๋ณด๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
>
>1. array ์ด๋ฆ„์€ l-value๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ unmodifiable์ด๋‹ค.

ํ‘œ์ค€์€ ์ด๋ฅผ lvalue ์™€ modifiable lvalue ๋กœ ๊ตฌ๋ถ„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

>์˜ˆ4)
>
>int a[10], *p;
>a = p; /* ์ด๋Ÿฐ ์ผ์„ ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. */
>
>2. referencing
>
>์–ด๋ ˆ์ด์˜ ์œ„์น˜๋Š” ์ปดํŒŒ์ผ์„ ํ•  ๋•Œ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์–ด๋ ˆ์ด์˜ ์–ด๋–ค ์š”์†Œ๋ฅผ
>์ฝ์–ด์˜ค๊ธฐ ์œ„ํ•ด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์–ด๋ ˆ์ด ์œ„์น˜๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ
>ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์„ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” indirect referencing์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด ๋‚ด์šฉ์€ C ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์˜ ๋” ๋‚ฎ์€ ๋ ˆ๋ฒจ์—์„œ ํ† ๋ก ๋  ๋‚ด์šฉ์ž…๋‹ˆ
๋‹ค. ์–ธ์–ด์˜ ์ถ”์ƒ์  ์ •์˜์ธ C ์–ธ์–ด์˜ ์ •์˜๋Š” ๋ฐฐ์—ด์˜ ์œ„์น˜๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋“ฑ์˜
ํ–‰๋™์„ ์ •์˜ํ•˜๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋””๊นŒ์ง€๋‚˜ type ์— ๋งž๋Š” ์ˆ˜์‹์˜ ํ‰๊ฐ€์™€
side effect ๋“ฑ์ด ์žˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ, ์ •์  ๊ธฐ์–ต๋ถ€๋ฅ˜๋ฅผ ๊ฐ–๋Š” ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์˜ ํ•œ ์‹คํ–‰๋™์•ˆ ์ฃผ์†Œ์ƒ์ˆ˜
(address constant) ๋‚จ๊ฒŒ ๋˜์ง€๋งŒ, ์ž๋™ ๊ธฐ์–ต๋ถ€๋ฅ˜๋ฅผ ๊ฐ–๋Š” ๋ฐฐ์—ด์€ ๊ทธ๋ ‡์ง€ ์•Š
์ง€์š”.

[...]


>
>์ด๋Ÿฐ ๋ ˆํผ๋Ÿฐ์‹ฑ์˜ ์ฐจ์ด๋กœ ์ธํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ์‹คํ–‰์‹œ ์˜ค๋ฅ˜๋ฅผ ๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
>
>์˜ˆ6)
>
>file A:
> int a[10];
>
>file B:
> extern int *a;
> int c;
> c = a[10];

C ์–ธ์–ด๋Š” ์ด ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ค๋ฅ˜๋ฅผ ๊ทธ๋Ÿฐ์‹์œผ๋กœ ํ•ด์„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์œ„์˜ ํ”„๋กœ
๊ทธ๋žจ์ด undefined behavior ๋ฅผ ๊ฐ–๋Š” ์ด์œ ๋Š” ๋Œ€์ƒ์ฒด (object) ๋ฅผ ์œ„ํ•œ ๋ช…์นญ
์ธ a ์˜ type ์ด ํ˜ธํ™˜๋˜๋„๋ก ์„ ์–ธ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ B ์—์„œ
์˜ฌ๋ฐ”๋ฅด๊ฒŒ a[10] ์œผ๋กœ ์„ ์–ธ๋œ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ ๋‹ค์Œ์„
dereferencing ํ•˜๋Š” ํ–‰๋™์€ undefined behavior ์ž…๋‹ˆ๋‹ค.

[...]


>
>ํ‘œ์ค€ ๋ฌธ์„œ๋ฅผ ๋ณด๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” ์ž˜ ๋œ ์ฑ…์„ ๋ณด์‹œ๋Š”๊ฒŒ ๋” ๋‚ณ์„ ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ‘œ์ค€๋ฌธ์„œ๋ณด๋‹ค ๋” ์ž˜๋œ ์ฑ…์ด ์žˆ์Šต๋‹ˆ๊นŒ? :) (๋†๋‹ด์ž…๋‹ˆ๋‹ค)

myco...@hanmail.net

unread,
Apr 6, 2001, 4:50:57โ€ฏAM4/6/01
to
>"kuru" <evi...@catholic.or.kr> wrote in message
>news:tUIy6.360$2b5....@news2.bora.net...
[...]

>์ €๋„ ๊ณต๋ถ€ํ•˜๋Š” ์˜๋ฏธ์—์„œ array์™€ pointer๊ฐ€ ๊ฐ™์„ ๋•Œ์™€ ๋‹ค๋ฅผ ๋•Œ๋ฅผ ์ •๋ฆฌํ•ด ๋ณด๋„๋ก
>ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
>
>- array์™€ pointer๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ
>
>1. expression ์•ˆ์˜ array ์ด๋ฆ„์€ ๊ทธ array์˜ ์ฒซ๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋กœ
>์ทจ๊ธ‰๋œ๋‹ค.

๋ฌผ๋ก  sizeof ์—ฐ์‚ฐ์ž๋‚˜ ๋‹จํ•ญ & ์—ฐ์‚ฐ์ž์˜ ํ”ผ์—ฐ์‚ฐ์ž์ธ ๊ฒฝ์šฐ์—๋Š” decay ํ•˜์ง€ ์•Š
์Šต๋‹ˆ๋‹ค.

>


>์˜ˆ1)
>
>int a[10], *p;
>p = a;
>
>2. array์˜ ์ฒจ์ž(subscript)๋Š” ํฌ์ธํ„ฐ ์˜คํ”„์…‹๊ณผ ๋™์ผํ•˜๋‹ค.

a[i] ๋Š” ์ •์˜ ์ž์ฒด๊ฐ€ *((p)+(i)) ์ž…๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ ์˜คํ”„์…‹์ด๋ž€ ๊ฒฐ๊ตญ ๋Œ€์ƒ์ฒด


ํฌ์ธํ„ฐ (pointer to object type) ์™€ ์ •์ˆ˜์˜ +, - ์—ฐ์‚ฐ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋ฐฐ์—ด
์ฒจ์ž ์—ญ์‹œ (๋‹จ์ˆœํ•œ ์„ค๋ช…์ด ์•„๋‹Œ) ์–ธ์–ด์  ์ •์˜ ์ž์ฒด๊ฐ€ ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์œผ๋กœ ์ •์˜
๋˜๊ธฐ์— ๋‘˜ ์‚ฌ์ด์˜ ๊ตฌ๋ถ„์€ ์ „ํ˜€ ํ•„์š”์—†์Šต๋‹ˆ๋‹ค. - ๋‹ค๋งŒ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์˜๋„๋ฅผ
ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•  ๋ฟ์ž…๋‹ˆ๋‹ค.

>์˜ˆ2)


>
>int a[10], *p, i;
>p = a;
>
>for (i = 0; i < 10; i++) a[i] = 0;
>for (i = 0; i < 10; i++) p[i] = 0;
>for (i = 0; i < 10; i++) *(p+i) = 0;
>for (i = 0; i < 10; i++) *p++ = 0;
>
>์œ„์— ์žˆ๋Š” ๋„ค๊ฐœ์˜ for ๋ฌธ์€ ๋ชจ๋‘ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. (๋ฌผ๋ก  ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€
>๋งŒ๋“  ์ฝ”๋“œ๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค๋งŒ)

C ์˜ ์–ธ์–ด์  ์ •์˜๋Š” actual machine ์ด ์•„๋‹Œ abstract machine ์ด๋ฏ€๋กœ, ์ปด


ํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋งŒ๋“œ๋Š” ์ฝ”๋“œ๋Š” (C ์–ธ์–ด์˜ ์ž…์žฅ์—์„œ๋Š”) ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ
๊ทธ๋Ÿฌํ•œ ์ •์˜๊ฐ€ ์š”๊ตฌํ•˜๋Š” ํ–‰๋™์ด ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒƒ์ฒ˜๋Ÿผ (as if) ํ•ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด
๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ์œ„์˜ 4๊ฐœ์˜ for ๋ฌธ์ค‘ ๋งˆ์ง€๋ง‰ for ๋ฌธ์€ ์œ„์˜ 3๊ฐœ์™€ ๊ฒฐ๊ณผ๋กœ ๋‚˜์˜ค๋Š” ํ–‰๋™
์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. (p ์˜ ๊ฐ’์ด ๋ณ€ํ•˜๊ฒ ์ง€์š”)

>3. ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์„ ์–ธ๋œ array ์ด๋ฆ„์€ ๊ทธ array์˜ ์ฒซ๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ๊ฐ€๋ฆฌํ‚ค๋Š”
>ํฌ์ธํ„ฐ๋กœ ์ทจ๊ธ‰๋œ๋‹ค.

์•„๋ž˜ ์„ค๋ช…์€ ๋งž๋Š” ๋ง์ด์ง€๋งŒ, ์ด ์„ค๋ช…์€ ์กฐ๊ธˆ ํ‹€๋ฆฝ๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜ ์„ ์–ธ์€ ์–ด


๋””๊นŒ์ง€๋‚˜ ๋ช…์นญ์— ๋Œ€ํ•œ type ์˜ ์„ ์–ธ์ž…๋‹ˆ๋‹ค. ์„ ์–ธ์—์„œ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๊ฐ€๋ฅดํ‚ค
๊ณ  ์•ˆ ๊ฐ€๋ฅดํ‚ค๊ณ ๋“ฑ์˜ ๋ฌธ์ œ๋Š” ์ƒ๊ด€์ด ์—†์Šต๋‹ˆ๋‹ค. ์ข€ ๋” ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด,
"ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์„ ์–ธ๋œ "์˜ฌ๋ฐ”๋ฅธ" (-> ์ž๊พธ ๊ฐ•์กฐํ•˜๋Š” ์ด์œ ๋ฅผ ์•„์‹œ๊ฒ ์Šต๋‹ˆ
๊นŒ?) ๋ฐฐ์—ดํ˜• (array of type) ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํฌ์ธํ„ฐํ˜• (pointer to type)
์œผ๋กœ ๋‹ค์‹œ ์“ฐ์—ฌ์ง‘๋‹ˆ๋‹ค (rewrite)." ๊ฒ ์ง€์š”.

>์˜ˆ3)


>
>void func(int *para) {}
>void func(int para[]) {}
>void func(int para[100]) {}
>
>์„ธ๊ฐœ์˜ ํ•จ์ˆ˜ ์ •์˜ ๋ชจ๋‘๊ฐ€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
>
>- array์™€ pointer๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ
>
>์›๋ž˜ type ์ž์ฒด๊ฐ€ ํ‹€๋ฆฌ๋ฏ€๋กœ ์œ„์˜ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋‘˜์€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฒƒ์ž…๋‹ˆ๋‹ค๋งŒ,
>(๋ฌผ๋ก  ํ˜„์‹ค์—์„œ๋Š” ์œ„์˜ ๊ฒฝ์šฐ๋“ค์ด ๋Œ€๋ถ€๋ถ„์ด์ง€๋งŒ ^^) ๊ฐ€์žฅ ๋งŽ์ด ํ‹€๋ฆฌ๋Š” ๋ถ€๋ถ„๋งŒ ์ข€
>์ ์–ด๋ณด๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
>
>1. array ์ด๋ฆ„์€ l-value๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ unmodifiable์ด๋‹ค.

ํ‘œ์ค€์€ ์ด๋ฅผ lvalue ์™€ modifiable lvalue ๋กœ ๊ตฌ๋ถ„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

>์˜ˆ4)


>
>int a[10], *p;
>a = p; /* ์ด๋Ÿฐ ์ผ์„ ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. */
>
>2. referencing
>
>์–ด๋ ˆ์ด์˜ ์œ„์น˜๋Š” ์ปดํŒŒ์ผ์„ ํ•  ๋•Œ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์–ด๋ ˆ์ด์˜ ์–ด๋–ค ์š”์†Œ๋ฅผ
>์ฝ์–ด์˜ค๊ธฐ ์œ„ํ•ด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์–ด๋ ˆ์ด ์œ„์น˜๋ฅผ ๊ฐ€์ ธ์˜ฌ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ
>ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์„ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” indirect referencing์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด ๋‚ด์šฉ์€ C ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ํ”„๋กœ๊ทธ๋žจ์˜ ๋” ๋‚ฎ์€ ๋ ˆ๋ฒจ์—์„œ ํ† ๋ก ๋  ๋‚ด์šฉ์ž…๋‹ˆ


๋‹ค. ์–ธ์–ด์˜ ์ถ”์ƒ์  ์ •์˜์ธ C ์–ธ์–ด์˜ ์ •์˜๋Š” ๋ฐฐ์—ด์˜ ์œ„์น˜๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋“ฑ์˜
ํ–‰๋™์„ ์ •์˜ํ•˜๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋””๊นŒ์ง€๋‚˜ type ์— ๋งž๋Š” ์ˆ˜์‹์˜ ํ‰๊ฐ€์™€
side effect ๋“ฑ์ด ์žˆ์„ ๋ฟ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ, ์ •์  ๊ธฐ์–ต๋ถ€๋ฅ˜๋ฅผ ๊ฐ–๋Š” ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ ํ”„๋กœ๊ทธ๋žจ์˜ ํ•œ ์‹คํ–‰๋™์•ˆ ์ฃผ์†Œ์ƒ์ˆ˜
(address constant) ๋‚จ๊ฒŒ ๋˜์ง€๋งŒ, ์ž๋™ ๊ธฐ์–ต๋ถ€๋ฅ˜๋ฅผ ๊ฐ–๋Š” ๋ฐฐ์—ด์€ ๊ทธ๋ ‡์ง€ ์•Š
์ง€์š”.

[...]
>


>์ด๋Ÿฐ ๋ ˆํผ๋Ÿฐ์‹ฑ์˜ ์ฐจ์ด๋กœ ์ธํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ์‹คํ–‰์‹œ ์˜ค๋ฅ˜๋ฅผ ๋‚ด๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
>
>์˜ˆ6)
>
>file A:
> int a[10];
>
>file B:
> extern int *a;
> int c;
> c = a[10];

C ์–ธ์–ด๋Š” ์ด ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ค๋ฅ˜๋ฅผ ๊ทธ๋Ÿฐ์‹์œผ๋กœ ํ•ด์„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์œ„์˜ ํ”„๋กœ


๊ทธ๋žจ์ด undefined behavior ๋ฅผ ๊ฐ–๋Š” ์ด์œ ๋Š” ๋Œ€์ƒ์ฒด (object) ๋ฅผ ์œ„ํ•œ ๋ช…์นญ
์ธ a ์˜ type ์ด ํ˜ธํ™˜๋˜๋„๋ก ์„ ์–ธ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ B ์—์„œ
์˜ฌ๋ฐ”๋ฅด๊ฒŒ a[10] ์œผ๋กœ ์„ ์–ธ๋œ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ ๋‹ค์Œ์„
dereferencing ํ•˜๋Š” ํ–‰๋™์€ undefined behavior ์ž…๋‹ˆ๋‹ค.

[...]
>


>ํ‘œ์ค€ ๋ฌธ์„œ๋ฅผ ๋ณด๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š” ์ž˜ ๋œ ์ฑ…์„ ๋ณด์‹œ๋Š”๊ฒŒ ๋” ๋‚ณ์„ ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ํ‘œ์ค€๋ฌธ์„œ๋ณด๋‹ค ๋” ์ž˜๋œ ์ฑ…์ด ์žˆ์Šต๋‹ˆ๊นŒ? :) (๋†๋‹ด์ž…๋‹ˆ๋‹ค)

Kim, Sung-Ryong

unread,
Apr 6, 2001, 7:07:07โ€ฏAM4/6/01
to
<myco...@hanmail.net> wrote in message news:9ak01h$p1g$1...@news.netple.com...

> >"kuru" <evi...@catholic.or.kr> wrote in message
> >news:tUIy6.360$2b5....@news2.bora.net...
> >
> >์ด๋Ÿฐ ๋ ˆํผ๋Ÿฐ์‹ฑ์˜ ์ฐจ์ด๋กœ ์ธํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋Š” ์‹คํ–‰์‹œ ์˜ค๋ฅ˜๋ฅผ ๋‚ด๊ฒŒ
๋ฉ๋‹ˆ๋‹ค.
> >
> >์˜ˆ6)
> >
> >file A:
> > int a[10];
> >
> >file B:
> > extern int *a;
> > int c;
> > c = a[10];
>
> C ์–ธ์–ด๋Š” ์ด ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ค๋ฅ˜๋ฅผ ๊ทธ๋Ÿฐ์‹์œผ๋กœ ํ•ด์„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์œ„์˜ ํ”„๋กœ
> ๊ทธ๋žจ์ด undefined behavior ๋ฅผ ๊ฐ–๋Š” ์ด์œ ๋Š” ๋Œ€์ƒ์ฒด (object) ๋ฅผ ์œ„ํ•œ ๋ช…์นญ
> ์ธ a ์˜ type ์ด ํ˜ธํ™˜๋˜๋„๋ก ์„ ์–ธ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ B ์—์„œ
> ์˜ฌ๋ฐ”๋ฅด๊ฒŒ a[10] ์œผ๋กœ ์„ ์–ธ๋œ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ ๋‹ค์Œ์„
> dereferencing ํ•˜๋Š” ํ–‰๋™์€ undefined behavior ์ž…๋‹ˆ๋‹ค.

์˜ˆ๊ฐ€ ํ‹€๋ ธ๊ตฐ์š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ˆ˜์ •ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ6)

file A:
int a[10];

file B:
extern int *a;
int c;

c = a[0];

Kong Hyeog Jun

unread,
Apr 6, 2001, 4:09:47โ€ฏPM4/6/01
to
> >์ €๋„ ๊ณต๋ถ€ํ•˜๋Š” ์˜๋ฏธ์—์„œ array์™€ pointer๊ฐ€ ๊ฐ™์„ ๋•Œ์™€ ๋‹ค๋ฅผ ๋•Œ๋ฅผ ์ •๋ฆฌํ•ด
๋ณด๋„๋ก
> >ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
> >- array์™€ pointer๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ
> >1. expression ์•ˆ์˜ array ์ด๋ฆ„์€ ๊ทธ array์˜ ์ฒซ๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ๊ฐ€๋ฆฌํ‚ค๋Š”
ํฌ์ธํ„ฐ๋กœ
> >์ทจ๊ธ‰๋œ๋‹ค.
> ๋ฌผ๋ก  sizeof ์—ฐ์‚ฐ์ž๋‚˜ ๋‹จํ•ญ & ์—ฐ์‚ฐ์ž์˜ ํ”ผ์—ฐ์‚ฐ์ž์ธ ๊ฒฝ์šฐ์—๋Š” decay ํ•˜์ง€ ์•Š
> ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ array type์˜ lvalue๋Š” usual unary conversion์— ์˜ํ•ด,
array์˜ ์ฒซ ๋ฒˆ์งธ element๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” pointer๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ๋‹จ ๋‹ค์Œ์˜ 3๊ฐ€์ง€์˜
๊ฒฝ์šฐ๋Š”
์ œ์™ธ์ž…๋‹ˆ๋‹ค.

1. array๊ฐ€ sizeof ๋˜๋Š” address operator(&)์˜ argument์ผ ๋•Œ,
2. character string literal ์ด character array๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋ ๋•Œ,
3. wide string literal ์ด wchar_t type์˜ array๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋  ๋•Œ,

์˜ˆ๋ฅผ ๋“ค๋ฉด,

char a[] = "abcd"; /* No conversion */
char *b = "abcd"; /* Array converted to pointer */
int i = sizeof(a); /* No conversion; size of whole array */
b = a +1 ; /* Array converted to pointer */

> >์˜ˆ1)
> >int a[10], *p;
> >p = a;
> >
> >2. array์˜ ์ฒจ์ž(subscript)๋Š” ํฌ์ธํ„ฐ ์˜คํ”„์…‹๊ณผ ๋™์ผํ•˜๋‹ค.
>
> a[i] ๋Š” ์ •์˜ ์ž์ฒด๊ฐ€ *((p)+(i)) ์ž…๋‹ˆ๋‹ค. ํฌ์ธํ„ฐ ์˜คํ”„์…‹์ด๋ž€ ๊ฒฐ๊ตญ ๋Œ€์ƒ์ฒด
> ํฌ์ธํ„ฐ (pointer to object type) ์™€ ์ •์ˆ˜์˜ +, - ์—ฐ์‚ฐ์ž…๋‹ˆ๋‹ค. ๋ฌผ๋ก  ๋ฐฐ์—ด
> ์ฒจ์ž ์—ญ์‹œ (๋‹จ์ˆœํ•œ ์„ค๋ช…์ด ์•„๋‹Œ) ์–ธ์–ด์  ์ •์˜ ์ž์ฒด๊ฐ€ ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์œผ๋กœ ์ •์˜

> ๋˜๊ธฐ์— ๋‘˜ ์‚ฌ์ด์˜ ๊ตฌ๋ถ„์€ ์ „ํ˜€ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค. - ๋‹ค๋งŒ ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์˜๋„๋ฅผ


> ํ‘œํ˜„ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•  ๋ฟ์ž…๋‹ˆ๋‹ค.
>
> >์˜ˆ2)
> >
> >int a[10], *p, i;
> >p = a;
> >
> >for (i = 0; i < 10; i++) a[i] = 0;
> >for (i = 0; i < 10; i++) p[i] = 0;
> >for (i = 0; i < 10; i++) *(p+i) = 0;
> >for (i = 0; i < 10; i++) *p++ = 0;
> >
> >์œ„์— ์žˆ๋Š” ๋„ค๊ฐœ์˜ for ๋ฌธ์€ ๋ชจ๋‘ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. (๋ฌผ๋ก  ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€
> >๋งŒ๋“  ์ฝ”๋“œ๋Š” ๋‹ค๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค๋งŒ)

์ฒจ์–ธํ•˜์ž๋ฉด, ์—ฌ๊ธฐ์„œ ์–ธ๊ธ‰ํ•œ ๋ชฉ์  ์ฝ”๋“œ๋‹ค ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์€ ๋Œ€ํ‘œ์ ์œผ๋กœ
a[i] ์™€ p[i]์˜ ๋ชฉ์ ์ฝ”๋“œ ์ž์ฒด๊ฐ€ ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
a[i] ์™€ p[i]๊ฐ€ ๋˜‘๊ฐ™์€ array element๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ๋˜‘๊ฐ™์€ ๊ฒฐ๊ณผ ๊ฐ’์„ ๊ฐ€์ง„๋‹ค๊ณ 
ํ•ด์„œ ๋™์ผํ•œ(identical) ์ˆ˜์‹์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋‹จ์ง€ ๋™๋“ฑํ•œ(equivalent) ์ˆ˜์‹์ผ
๋ฟ์ž…๋‹ˆ๋‹ค.
๋ชฉ์ ์ฝ”๋“œ ๋ถ€๋ถ„์€ Jun Woong ๋‹˜์˜ ์ง€์ ๋Œ€๋กœ ๊ทธ๋ฆฌ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์€ ์•„๋‹ˆ์ง€๋งŒ,
๊ฐœ๋… ์ •๋ฆฌํ•˜์‹ค ๋•Œ, ์•Œ๋ฉด ๋„์›€์ด ๋˜๋Š” ์ด์•ผ๊ธฐ๋ผ ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

> C ์˜ ์–ธ์–ด์  ์ •์˜๋Š” actual machine ์ด ์•„๋‹Œ abstract machine ์ด๋ฏ€๋กœ, ์ปด
> ํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋งŒ๋“œ๋Š” ์ฝ”๋“œ๋Š” (C ์–ธ์–ด์˜ ์ž…์žฅ์—์„œ๋Š”) ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ
> ๊ทธ๋Ÿฌํ•œ ์ •์˜๊ฐ€ ์š”๊ตฌํ•˜๋Š” ํ–‰๋™์ด ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒƒ์ฒ˜๋Ÿผ (as if) ํ•ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด
> ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
> ๋˜ํ•œ ์œ„์˜ 4๊ฐœ์˜ for ๋ฌธ์ค‘ ๋งˆ์ง€๋ง‰ for ๋ฌธ์€ ์œ„์˜ 3๊ฐœ์™€ ๊ฒฐ๊ณผ๋กœ ๋‚˜์˜ค๋Š” ํ–‰๋™
> ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. (p ์˜ ๊ฐ’์ด ๋ณ€ํ•˜๊ฒ ์ง€์š”)

> >3. ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์„ ์–ธ๋œ array ์ด๋ฆ„์€ ๊ทธ array์˜ ์ฒซ ๋ฒˆ์งธ ํ•ญ๋ชฉ์„ ๊ฐ€๋ฆฌํ‚ค๋Š”
> >ํฌ์ธํ„ฐ๋กœ ์ทจ๊ธ‰๋œ๋‹ค.

aaa[] ์™€ *aaa ๋ผ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๋‹ค๋ฅธ ํ‘œํ˜„์ด์ง€๋งŒ, ํ•จ์ˆ˜์˜ argument๋กœ
์‚ฌ์šฉ๋  ๋•Œ์— ํ•œํ•˜์—ฌ ๋™์ผํ•œ ํ‘œํ˜„์œผ๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค.
์ •ํ™•ํžˆ ํ‘œํ˜„ํ•˜์ž๋ฉด, array type์„ ๊ฐ€์ง„ aaa๊ฐ€ pointer ํ˜•์œผ๋กœ ๋ณ€ํ™˜๋˜์–ด ์ทจ๊ธ‰
๋˜๊ธฐ์— ๋‘˜์˜ ํ‘œํ˜„์ด ๋™์ผํ•œ ํ‘œํ˜„์œผ๋กœ ์ทจ๊ธ‰๋˜์–ด์ง€๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

> ์•„๋ž˜ ์„ค๋ช…์€ ๋งž๋Š” ๋ง์ด์ง€๋งŒ, ์ด ์„ค๋ช…์€ ์กฐ๊ธˆ ํ‹€๋ฆฝ๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜ ์„ ์–ธ์€ ์–ด
> ๋””๊นŒ์ง€๋‚˜ ๋ช…์นญ์— ๋Œ€ํ•œ type ์˜ ์„ ์–ธ์ž…๋‹ˆ๋‹ค. ์„ ์–ธ์—์„œ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๊ฐ€๋ฅดํ‚ค
> ๊ณ  ์•ˆ ๊ฐ€๋ฅดํ‚ค๊ณ ๋“ฑ์˜ ๋ฌธ์ œ๋Š” ์ƒ๊ด€์ด ์—†์Šต๋‹ˆ๋‹ค. ์ข€ ๋” ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค๋ช…ํ•˜์ž๋ฉด,
> "ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์„ ์–ธ๋œ "์˜ฌ๋ฐ”๋ฅธ" (-> ์ž๊พธ ๊ฐ•์กฐํ•˜๋Š” ์ด์œ ๋ฅผ ์•„์‹œ๊ฒ ์Šต๋‹ˆ
> ๊นŒ?) ๋ฐฐ์—ดํ˜• (array of type) ์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํฌ์ธํ„ฐํ˜• (pointer to type)
> ์œผ๋กœ ๋‹ค์‹œ ์“ฐ์—ฌ์ง‘๋‹ˆ๋‹ค (rewrite)." ๊ฒ ์ง€์š”.
>
> >์˜ˆ3)
> >
> >void func(int *para) {}
> >void func(int para[]) {}
> >void func(int para[100]) {}
> >
> >์„ธ๊ฐœ์˜ ํ•จ์ˆ˜ ์ •์˜ ๋ชจ๋‘๊ฐ€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
> >
> >- array์™€ pointer๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ
> >
> >์›๋ž˜ type ์ž์ฒด๊ฐ€ ํ‹€๋ฆฌ๋ฏ€๋กœ ์œ„์˜ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ๋‘˜์€ ์„œ๋กœ ๋‹ค๋ฅธ
๊ฒƒ์ž…๋‹ˆ๋‹ค๋งŒ,
> >(๋ฌผ๋ก  ํ˜„์‹ค์—์„œ๋Š” ์œ„์˜ ๊ฒฝ์šฐ๋“ค์ด ๋Œ€๋ถ€๋ถ„์ด์ง€๋งŒ ^^) ๊ฐ€์žฅ ๋งŽ์ด ํ‹€๋ฆฌ๋Š” ๋ถ€๋ถ„๋งŒ
์ข€
> >์ ์–ด๋ณด๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
> >
> >1. array ์ด๋ฆ„์€ l-value๊ฐ€ ๋  ์ˆ˜ ์žˆ์ง€๋งŒ unmodifiable์ด๋‹ค.
>
> ํ‘œ์ค€์€ ์ด๋ฅผ lvalue ์™€ modifiable lvalue ๋กœ ๊ตฌ๋ถ„ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
>
> >์˜ˆ4)
> >
> >int a[10], *p;
> >a = p; /* ์ด๋Ÿฐ ์ผ์„ ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. */

์ฒจ์–ธํ•˜์ž๋ฉด, a๋Š” array type์˜ lvalue์€ usual unary conversion์— ๋”ฐ๋ผ first
element์˜ pointer๋กœ ๋ณ€ํ™˜๋˜๋ฏ€๋กœ value๋ฅผ assignment ํ•  ์ˆ˜ ์—†๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ‘œ์ค€๋ฌธ์„œ๊ฐ€ ์ข‹๊ธด ํ•œ๋ฐ ์–ด๋ ต์ฃ .. ^^; ๊ฐ€๋”์€ ์„ฑ๊ฒฝ์ฑ… ์ฝ๋Š” ๊ธฐ๋ถ„์ด ๋“ค๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.
*^^*
๋‚˜! ์ˆ˜๋„์Šน, ๋„ˆ! ํ‘œ์ค€๋ฌธ์„œ
^0^

------------------------
Kong Hyeog Jun
"๊ตญ๊ฐ€๋ณด์•ˆ๋ฒ• ์ฒ ํ๋˜๋Š” ๋‚ ์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ"

0 new messages