c++ int p[10]; 에서 포인터 상수에 값을 대입 질문 </tr>
글쓴이: gyxor / 작성시간: 목, 2003/03/13 - 5:08오후
#include<iostream> using namespace std; int main() { int p[10]; int r[10]={9}; cout << p[0] << "=>주소값 " << p <<"\n"; cout << r[0] << "=>주소값 " << r <<"\n" ; p=r; cout << p[0] << "=>주소값 " << p << "\n"; cout << r[0] << "=>주소값 " << r ; return 0; }
이러한 예문에서 예전 컴파일러에서 실행해보면 p=r; 이라는건 무조건 에러였습니다.
그런데 이번에 새로 설치한 gcc 로 헤더파일도 iostream.h --> iostream 으로
바꿔서 컴파일해보니까 되는것이었습니다.
혹시몰라서 주소값을 출력해보니까 p가 고유의 주소값을 유지한다는것을
알 수 있었습니다.
그렇다면 단순히 주소를 대입시키는 차원이아니라 주소를 유지한채
마치 strcpy함수처럼 순수한 값에의한 대입이 이루어 지고 있다는것인데요..
물론 제가 다른 borlandc3.1 이나 visual 6.0 이나
다른 gcc (버젼은 모르겠음)
에서 해보면 에러입니다.
유일하게 되는것은 yahoo 에서 djgpp 검색했을때 3,4번째
사이트에서 받은.. (구버젼으로 추정됨) gcc에서만
에러없이 위 내용이 가능했습니다.
컴파일러마다의 차이는 인정합니다. 궁금한것은
위 사항같은경우 = 연산자에 대한 operator 함수가
기본적으로 제공되지 않는다면 불가능한 사항이 아니겠습니까?
그러니까 gcc컴파일러에 ..그러한(기본제공) 부분이 있어서 위 사항이
가능했다.. 고 이해하면 되겠습니까?
저도 더 깊은 부분까지 지금 다 해결하려는건 아닙니다..
하지만 어느정도의 결론을 이끌어내고 싶어서 질문드립니다.
답변 부탁드립니다.
Forums:
저도 c++에서 추가된 array 관련 article은 읽고서 쓰는 것은
저도 c++에서 추가된 array 관련 article은 읽고서 쓰는 것은 아닙니다.
다만, 몇가지 test해본 결과
두 array의 type (내용 type과 크기)이 일치할 경우를 같은 변수로 보고
위 코드의 sizeof(p) 한 만큼의 값을 shallow copy (memcpy) 하는 것 같습니다.
변수가 만약, 사용자 정의된 class인 배열이라면, 각 copy마다 생성자가 불리는지는 모르겠군요.. 성질같아선 불릴것 같습니다만... ^^
array에 이런 특징이 있는 줄 몰랐는데요. 좋은 예제 감사합니다.
---
http://coolengineer.com
위와 같이 배열로 잡은 변수들의 메모리주소는 존재하지만..그 주소
위와 같이 배열로 잡은 변수들의 메모리주소는 존재하지만..
그 주소가 변수가 아닌 어떤 값일 뿐이므로 위와 같이 하는것은 잘못된것입니다.
즉,
int a;
100 = a;
뭐 이런식의 표현이 안되는것고 같은 것이라고 보면 될것같습니다.
(말 재주가 없어서.. 어떻게 설명하기가 힘드네요..ㅡㅡ; )
단지, 컴파일러에 따라 위와 같은 표현을 memcpy 처럼 작동하게 정의 되어 있는 컴파일러가 있는것 같습니다.
댓글 달기