none
행렬에 관한 불만 사항입니다. RRS feed

  • 질문

  • 행렬을 사용할때 int m[3][3]={1,2,3,4,5,6,7,8,9}

    로 줘놓고 그 값을 찾을때는 m[i][j]일때 i,j가 0부터 시작한다는게 뒷통수 때리는 기분이라 이해하기도 힘들고 상당히 불편합니다.

    그냥 그렇다고요;

    2013년 11월 18일 월요일 오전 12:47

답변

  • 말씀하신 불만은, C/C++ 위원회에 제출하시는 것이 좋을 것 같습니다.

    Visual C++ 개발사 측에서 임의로 바꿀 수 없는 내용입니다. ^^

    2013년 11월 18일 월요일 오전 3:03
  • 그래서 PASCAL 같은 프로그래밍 언어에서는 배열의 시작 인덱스를 고정하지 않고 바꿀수도 있죠. ㅎㅎ

    그런데 왜 C에서는 그 기능을 왜 안넣었을까 하는 고민을 해본적도 있습니다. 사실, PASCAL 소스를 C로

    변환을 많이 했었기 때문에 저 기능이 정말 짜증이였거든요!

     

    제가 생각한 C 언어는 개발할때부터 최소한의 문법을 지향하도록 설계되었고 가능한 많은 부분을 사용자가

    재구성하기를 바랬던것 같습니다. 예를들어, 지금과 같은 고민을 하시는 분들은 배열의 인덱스가 1 부터

    되었으면 좋겠다는 뜻이죠? 그럼 아래와 같이 전처리기를 이용해서 표현이 가능합니다.

     

    #define GetMatrix(array, x, y) array[x-1][y-1]

       

    void main()
    {
        int m[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

        // GetMatrix(m, 1, 1) 은 m[0][0] 을 의미합니다.

        printf("%d\n", GetMatrix(m, 1, 1));
    }

     

    위 코드를 조금더 응용하면 어떤식으로든 표현을 바꿀수 있다는 뜻이고 전처리기는 특성상

    실행시에 속도에 영향을 미치지 않기 때문에 불이익도 별로 없습니다. ㅎㅎ

     

    이런 방법자체도 싫으시다면 정성태 MVP님이 이야기 하신것처럼 제출해 보시는것도 방법일듯하네요~^^

    2013년 11월 18일 월요일 오전 4:38
    중재자
  • 아마 index가 1부터 시작하는거에 익숙하신가봅니다. "첫번째 요소" = 1 이렇게 이해하고 싶으신 거겠지요.  그렇게 이해하지 마시고 메모리 레이아웃의 관점에서 보시면 C/C++ 의 배열인덱스가 오히려 더 직관적이고 이해도 쉽습니다.

    a[0]은 배열이 있는 메모리 위치에서 전혀 offset이 없는것 .. a[1]은 배열에서 1만큼 offset된 것으로요. C에서 배열을 이렇게 지원하기때문에 배열 -> 포인터 또는 그 반대로의 변환이 매우 쉬워집니다. 그리고 C의 장점이라 하면 코드를 보면 이게 기계어로 어떻게 컴파일 되는지 쉽게 판단할수 있다는거지요. 그렇기 때문에 성능을 최대한으로 뽑을땐 C/C++ 만큼 좋은 언어가 없구요.

    영진전문대학을 다니신다고 써놓으셨는데(프로필에) 학교에서 아직 시스템 구조를 배우셨는지 모르겠습니다. 시스템 구조를 배우신다면 C/C++에서 배열이 이렇게 되어있는게 좀더 이해가 잘 될 겁니다. 아니면 굳이 하드웨어를 이해할 필요가 없는 프로그래머시라면 굳이 C/C++을 쓰시기 보단 입맛에 맞으시는 다른 언어를 쓰시는게 어떨까 생각합니다.


    My Blog

    2013년 11월 22일 금요일 오전 6:58

모든 응답

  • 말씀하신 불만은, C/C++ 위원회에 제출하시는 것이 좋을 것 같습니다.

    Visual C++ 개발사 측에서 임의로 바꿀 수 없는 내용입니다. ^^

    2013년 11월 18일 월요일 오전 3:03
  • 그래서 PASCAL 같은 프로그래밍 언어에서는 배열의 시작 인덱스를 고정하지 않고 바꿀수도 있죠. ㅎㅎ

    그런데 왜 C에서는 그 기능을 왜 안넣었을까 하는 고민을 해본적도 있습니다. 사실, PASCAL 소스를 C로

    변환을 많이 했었기 때문에 저 기능이 정말 짜증이였거든요!

     

    제가 생각한 C 언어는 개발할때부터 최소한의 문법을 지향하도록 설계되었고 가능한 많은 부분을 사용자가

    재구성하기를 바랬던것 같습니다. 예를들어, 지금과 같은 고민을 하시는 분들은 배열의 인덱스가 1 부터

    되었으면 좋겠다는 뜻이죠? 그럼 아래와 같이 전처리기를 이용해서 표현이 가능합니다.

     

    #define GetMatrix(array, x, y) array[x-1][y-1]

       

    void main()
    {
        int m[3][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

        // GetMatrix(m, 1, 1) 은 m[0][0] 을 의미합니다.

        printf("%d\n", GetMatrix(m, 1, 1));
    }

     

    위 코드를 조금더 응용하면 어떤식으로든 표현을 바꿀수 있다는 뜻이고 전처리기는 특성상

    실행시에 속도에 영향을 미치지 않기 때문에 불이익도 별로 없습니다. ㅎㅎ

     

    이런 방법자체도 싫으시다면 정성태 MVP님이 이야기 하신것처럼 제출해 보시는것도 방법일듯하네요~^^

    2013년 11월 18일 월요일 오전 4:38
    중재자
  • 아마 index가 1부터 시작하는거에 익숙하신가봅니다. "첫번째 요소" = 1 이렇게 이해하고 싶으신 거겠지요.  그렇게 이해하지 마시고 메모리 레이아웃의 관점에서 보시면 C/C++ 의 배열인덱스가 오히려 더 직관적이고 이해도 쉽습니다.

    a[0]은 배열이 있는 메모리 위치에서 전혀 offset이 없는것 .. a[1]은 배열에서 1만큼 offset된 것으로요. C에서 배열을 이렇게 지원하기때문에 배열 -> 포인터 또는 그 반대로의 변환이 매우 쉬워집니다. 그리고 C의 장점이라 하면 코드를 보면 이게 기계어로 어떻게 컴파일 되는지 쉽게 판단할수 있다는거지요. 그렇기 때문에 성능을 최대한으로 뽑을땐 C/C++ 만큼 좋은 언어가 없구요.

    영진전문대학을 다니신다고 써놓으셨는데(프로필에) 학교에서 아직 시스템 구조를 배우셨는지 모르겠습니다. 시스템 구조를 배우신다면 C/C++에서 배열이 이렇게 되어있는게 좀더 이해가 잘 될 겁니다. 아니면 굳이 하드웨어를 이해할 필요가 없는 프로그래머시라면 굳이 C/C++을 쓰시기 보단 입맛에 맞으시는 다른 언어를 쓰시는게 어떨까 생각합니다.


    My Blog

    2013년 11월 22일 금요일 오전 6:58