안녕하세요~
정말 ㅡㅡ; 책을 보다가 궁금해서요~
배열의 이름은 첫번째 원소의 주소다라고 앞페이지의 설명을 보았습니다.
그런데 배열의 이름에 &연산자를 붙이면 대체 어떤 뜻이 되는 건가요;
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-;;;)