|
1번
char name1[20];
2번
char *name2;
name2 = (char*)malloc(sizeof(char)*20);
두가지의 차이점을 보면요...
1번과 2번이 차지하는 메모리의 양은 각각
20바이트 22바이트 입니다.(도스)
1번의 name1는 변수가 아닙니다.
2번의 name2는 변수구요.
2번의 name2가 변수로써 2바이트의 메모리를 차지하기 때문에 22바이트가 된거구요.
LValue는 당연히 변수이여야만 합니다.
값을 할당받을려고 하면 공간(변수)이 있어야 하니까요.
name1은 name1++같은 포인터 연산이 안됩니다.
연산을 할려면 공간(변수)에 값이 저장되어 있어야 하는데 공간 자체가 없으니까요.
반면에 name2는 가능합니다.
1번이 변수가 아니다라는 부분의 설명이 부족합니다만 설명을 제대로 못하겠네요...
"seojt"에서 앞의 "를 문자열의 시작주소, 뒤의 "를 문자열의 종료문자(\0)로 생각하고
공부해 보세요 전 많은 도움이 되었습니다.
|