[C++] char *a="co",*b="co"; 이면 a==b?
글쓴이: gyxor / 작성시간: 화, 2004/09/28 - 11:46오후
#include <iostream> using namespace std; int main() { char *a = "cool"; char *b = "cool"; cout << (int)a << endl; cout << (int)b; return 0; }
결과는
4632604
4632604
이었습니다. 좀 이해가 안됩니다.
(단,문자열의 내용이 달라지면 주소값도 달라졌습니다.)
data segment에 스트링을 저장할때에 그 내용까지 검사해서
중복인경우에 변수가 같은 주소를 가지도록 하는 구현이 들어가
있는것인가요?
설명 부탁드립니다.
Forums:
Re: [C++] char *a="co",*b="co"; 이면 a==
최적화입니다.
옵션이나 임플레멘테이션(구현)에 따라 달라집니다.
- 죠커's blog / HanIRC:#CN
같은 내용을 갖는 문자열 상수(String Literal)는 하나만 만들
같은 내용을 갖는 문자열 상수(String Literal)는 하나만 만들어질 수도 있습니다. 어차피 문자열 상수는 수정이 불가능하므로 같은 내용이라면 굳이 여러개를 만들 필요가 없습니다.
좋은 답변감사합니다.
최적화였군요.. ^^;
오.. 신기 하네요..그래서 제가 다르게 만들어봤는데요..[c
오.. 신기 하네요..
그래서 제가 다르게 만들어봤는데요..
출력1-------------------
10758
10758
aaaa
10758
61616161
bbbb
62626262
61616161
출력2---------------
10758
10758
aaaa
10758
61616161
aaaa
61616161
61616161
이런 경우..
scanf 받을때마다 새로운 주소를 할당받는데요..
그럼 이 입력받을때마다..
메모리의 모든 곳을 검색하고 같은 값을 갖는 곳이있나 확인하고
만약 같은 값을 갖는 곳이있으면 그 주소를 할당하고
같은 값을 갖는 곳이 없으면 새로운 주소를 할당하는 건가요?
[quote="찬밥"]오.. 신기 하네요..그래서 제가 다르게 만들어
만약
해보신다면 segmentation fault가 떨어지는것을 알 수 있습니다.
scanf는 입력받은 내용을 버퍼에 복사하는 것이지, 할당해서 포인터를 넘겨주는것이 아닙니다.
같은 내용을 (입력받은 문자) 복사 했으므로 같은 값이 나오지만 그것이 사실은 포인터가 아니라 문자 내용인것이지요.
언제나 삽질 - http://tisphie.net/typo/
프로그래밍 언어 개발 - http://langdev.net
댓글 달기