배열의 정확한 타입
글쓴이: vani2 / 작성시간: 월, 2013/10/21 - 7:13오후
http://www.dal.kr/chair/cdata/cfaq_kr/node10.html
위 링크를 따르면
배열의 Data Type은 T (*)[] 이라고 볼 수 있는데
배열은 포인터가 아니라고 나와있던데..
그렇다면 저 타입은 배열 포인터로 밖에 볼 수 없다고 치면
배열의 정확한 타입은 무엇인가요?
Forums:
> 배열의 Data Type은 T (*)[] 이라고
> 배열의 Data Type은 T (*)[] 이라고 볼 수 있는데
이런 식으로 배열의 실체가 배열이 아닌 어떤 다른 것이라고 이해하지 마세요.
배열의 타입은 배열입니다.
배열이 특별한 것은 특별한 타입이기 때문이 아니라 수식 안에서의 특별한 변환규칙 때문입니다.
(그리고 이것에 더해, 함수 매개변수일때도 변환규칙이 하나 더 있습니다)
위 링크의 Q 6.3과 Q 6.4를 읽어보세요.
그렇군요 제가 잘못 알고 있었네요. 답변
그렇군요 제가 잘못 알고 있었네요.
답변 감사합니다.
헷갈려서는 안되는 것중의 하나가
개념에 집착한 나머지 원래의 의미를 잊으면 안됩니다.
배열의 이름은 그 배열의 시작주소를 가르킨다, 라고만 이해해 두시면 됩니다.
코드를 작성하면서 의미가 있는 문자를 사용하고
갖가지 개념들을 가지고 있는 언어에 함몰되어 본말이 전도되어선 안되겠죠.
굳이 C의 언어로 이해를 돕자면, const T* 겠지만 위에서 말씀하신 대로
배열을 배열이 아닌 다른 것으로 생각하는 것은 그에 기반하여 사고를 확장하게 되어 착오를 일으킬 수 있습니다.
그렇군요. 그러고 보니 지금까지 저는 너무
그렇군요.
그러고 보니 지금까지 저는 너무 개념정리하느라 다른것들을 개을리 한 것 같네요.
어제 코딩을 해보았는데 초보도 안 할만한 여러 실수를 했습니다.
부끄럽네요.
고쳐야겠습니다.
좋은 말씀 감사드립니다.
> 배열의 이름은 그 배열의 시작주소를
> 배열의 이름은 그 배열의 시작주소를 가르킨다.
배열의 이름만 그런 것이 아니고, 배열 타입의 결과값을 갖는 수식이면 다 적용됩니다.
따라서 별로 좋은 설명방식은 아닙니다.
VC 에서 디스어셈블로 보면 이렇습니다.
그러니까. 저도 잘 모르지만.
포인터'는 DWORD PTR [위치주소], 값
배열'은 BYTE PTR [위치주소], 값
입니다.
모두 4 바이트를 사용합니다. 그래서 32 비트 (4바이트 * 8비트) 컴퓨터라고 합니다. ㅇ_ㅇ;;
참고로. 포인터는 메모리 주소입니다. 4바이트 16진수 주소죠. ㅇ_ㅇ;;
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
...
컴파일러는 실행속도를 빠르게 하기 위해 (혹은 그냥 맘대로) 코드를 만드는 과정에서 여러 가지 최적화를 합니다. 그렇기 때문에 고급언어로 "a와 b의 차이는 무엇일까?"가 궁금하다고 해서 a, b를 컴파일시켜 보고 어셈블러의 차이를 보는 것은 굉장히 위험한 방식입니다.
컴파일러 입장에서는 언어가 정한 규칙을 지키기만 하면 되기 때문에 a와 b가 실은 똑같은 의미라도 자기 맘대로 해당 상황에서 똑같은 행동을 하지만 겉보기에는 다른 어셈블리 코드를 만들어낼 수 있습니다. 그걸 보고 "같은 의미라면 컴파일러가 이렇게 다른 코드를 만들어낼 리 없잖아?" 해봤자 소용 없습니다. (불만 있으면 그 컴파일러 개발팀에 들어가든지 해야죠.)
마찬가지로 a와 b가 이러저러한 의미 차이가 있다고 해서 어셈블리 코드를 보고 그 차이를 배울 수 있을 거라는 기대는 안하는 게 좋습니다.
답변 감사합니다. ㅇ_ㅇ;;
제가 이것저것 해봤는데. 문법적인건 책을 보는것이 맞고.
답이 맞건 틀리건... 경험상 이런 방식이. 가장 이해하기 쉬운 접근방식으로 생각되서요. ㅇ_ㅇ;;
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기