2012-09-14 5 views
0

char * p = "Welcome"라고 쓰면. p에 대한 주소를 볼 수 있습니다. 그러나 Welcome에 저장된 주소의 문자열에 대한 주소는 무엇입니까?상수 문자 배열을위한 메모리 할당

다시 쓸 경우 char * s = "Welcome"입니다. p와 s는 같은 주소를 가리 킵니까?

답변

2

디버거에서 p을 검사하면 문자열의 주소가 표시됩니다.

&pp 그 자체의 주소입니다.

그리고 아니요, p과 은 동일한 주소를 가리 키지 않을 수도 있습니다.

+0

실제로. 일부 컴파일러는 문자열 상수를 재활용하므로 주소가 동일 할 수 있습니다. –

+0

.map 파일을 고맙습니다. 주소를 봅니다 .conststring 0x080717d8 섹션 main.o (.conststring) – Ramana

+0

문자열 주소가 동일하고 재 작성되지 않아서 주소가 가리키는 주소가 동일하므로 고맙습니다. – Ramana

0

는 "환영"문자열 상수이며 종종 읽기 "에 퍼트있다"에 오신 것을 환영합니다 "리터럴이 문자열 상수

+0

질문은 p가 지역 변수라는 것을 암시하지 않습니다. 스택에 있지 않고 데이터 섹션에도있을 수 있습니다 (쓰기 가능). –

+0

감사합니다.이 const 문자열의 주소를 인쇄하는 방법은 무엇입니까? * p는 문자열 값을 제공하고 & p는 p 주소를 제공합니다. 죄송합니다. % s의 * p 프린트는 문자열을 제공하고 % x는 주소를 제공합니다. 희망하는 것은 % x을 가진 프린트에서 상수 문자열의 주소입니다. – Ramana

0

문자열을 가리키는 스택에 생성 된 메모리 있지만 포인터 P의 읽기 전용 데이터 섹션에 저장됩니다 전용 데이터 "섹션을 참조하십시오. 내가 다시 작성하는 경우 String litereals where do they godata segment

당신이

printf("%p",p); 

에 의해 문자열 상수 "환영"의 주소를 찾을 수의 = "환영"문자 * : 여기 는 대한 좋은 설명입니다. p와 s는 동일한 주소를 가리 킵니까?

동일한 문자열 상수가 같은 주소에 배치되어있을 수 있습니다.