메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

뇌를 자극하는 C++ 프로그래밍

뇌를 자극하는 C++ 프로그래밍 질의응답 게시판입니다.

책 p.267 에서

2008-01-29

|

by 최중호

2330

안녕하세요~

정말 ㅡㅡ; 책을 보다가 궁금해서요~

배열의 이름은 첫번째 원소의 주소다라고 앞페이지의 설명을 보았습니다.

그런데 배열의 이름에 &연산자를 붙이면 대체 어떤 뜻이 되는 건가요;

long (*p)[20] = &lArray;

이 내용인데..

이것은 대체 무엇을 의미하는지 모르겠습니다.

저는 씨언어도 한번 공부했었는데요.

배열 이름에 &붙인것은 못봐서 정말 아리쏭 다리쏭 합니다;


long (*p)[20] 은 열이 20개인 2차원 배열을 가리키는 포인터변수 선언으로 봐서

(1) 2차원 배열의 주소를 넣어주거나
long lArray[1][20]; // 2차원 배열 선언후        
long (*p)[20] = lArray ; // 2차원 배열주소로 초기화


혹은.. 책에서처럼 1차원 배열을
(2) 2차원 배열을 나타내는 형으로 강제 형변환시켜서 주소를 넣어주는걸로 알았거든요
long lArray[20];
long (*p)[20] = (long (*)[20]) lArray ; // 형변환 (long (*)[20])


물론 이것은 ㅡㅡ;; 씨쁠쁠이 아닌 씨를 공부했을 때 봤던거라서요..
씨쁠쁠은 현재 처음 공부하고 있습니다.
현재 스터디를 하는데 추천책으로 선정되서 보고 있습니다.


책에선 1차원 배열의 이름에 주소연산자(&lArray) 를 써서 마치 2차원 배열가튼 느낌으로
포인터 변수가 조작되니깐요..;
(*p)[3] = 300 ; 에서 (*p)를 배열식으로 표현하면 p[0]이고 p[0][3] = 300;
거꾸로 포인터연산으로 죄다 풀어서 *( *p + 3 ) = 300; 도 가능하지 않습니까;;

음음.. 배열이름에 &붙이면 대체 어떻게 되는건지 확실히 알고 싶습니다.
이렇게 쓰는 것도 올바른 방법인것인지도요.
(물론 책에서 나온거니 올바른 방법이겠지만요;; 다만 c책에선 본적이 없던지라 ㅠ)

또 2차원 배열로 선언했거나 아님 강제 형변환을 써서 조작하는것은 문제가 있는건가요?


하도 수상쩍어서 sizeof 연산자를 써서 출력을 했더니.. ( sizeof(lArray), sizeof(&lArray) )
배열 이름과 동일한 주소를 가리키고, 동일한 크기를 가지고 있습니다.
(그런데 sizeof( lArray + 1 ), sizeof( &lArray + 1 ) 또한 똑같이 4로 주소크기 출력하고요)


또 lArray + 1 과 &lArray + 1 은 전혀 다르게 출력이 되더군요.

( &lArray + 1 ) - lArray 는 또한 컴파일 오류가 되더군요 ㅡㅡ;


&lArray 와 lArray 혹은 &lArray[0] 같은 주소를 가리키지만
연산시에는 가리키는 값이 전혀 다르고 또한 포인터간의 뺄샘도 안되고..


음 스터디의 다른분들은 그냥 상관없이 문제없이 쓰시는듯한데..
저만 유독 -_-;; 이것이 눈에 걸려서... 이 페이지에서 멈춰버린 상태입니다.

도와주세요~~ (-0-;;;)
댓글 입력
자료실