C 기초 질문입니다.

하하의 이미지

Quote:

char a[] = "test message";
char *b = "test message";

a 는 문자열 상수의 복사가 이루어져서 스택에 저장 되지만
b 같은 경우는 문자열 상수의 static 영역의 주소값이 저장이 되기 때문에
리턴값을 사용할수 있습니다.

상수라 함은 변경할 수 없는 값으로 const 키워드로 지정할 수 있다.

그런데 위 글을 보면 char a[] = "test message"; 이렇게 한걸 상수라고

하는데 잘 이해가 가질 않습니다. 또한 char * 로 지정된 곳에 초기 선언

과 함께 할당을 하면 static 영역 그러니깐 데이터 영역에 할당된다고 static

선언을 한것과 동일한 효과를 본다고 쓰여있는데.

이문제에 대한 답을 알고 싶습니다.

변수 선언과 초기 할당 , 할당 시 각각 메모리에 적재되는 위치가 다른 건가

요?

참고로 위 인용은 앞글중 제가 지금 드린 질문에 대한 답이 아니기에 이렇게

따로 떼어내어 질문드립니다. 감사합니다.....
[/code]

elecguy의 이미지

이렇게 생각하면 쉽습니다.
"test message" 문자열 내용자체는 메모리의 어딘가에 프로그램이 종료될 때까지 저장되어있어야 합니다.
따라서, "test message" 정적상수문자열이 되는 거지요.
"test message"가 10000번지에 저장되어있다고 가정하면

char a[] = "test message";
-> memcpy(a, (char *)10000, 13);

char *b = "test message"; 
-> b=(char *)10000;

이런 정도의 의미가 되겠죠.
10000번지는 프로그램이 종료될때까지 바뀌지 않으므로 b는 리턴값을 써도 되지만
a가 자동변수라면 주소가 일정하지 않으므로 리턴값으로 쓰면 안됩니다.

그럼.

폐인, 노가다 그 끝은..?