C 코드가 아래와 같습니다.
#typedef int HKEY[8];
위처럼 선언하고
HKEY keyarry[256]; 이렇게 사용 하고 있습니다.
2차원 배열이 된 것 같은데요
이 걸 java로 변경하려니 잘 안됩니다.
바구려면 어떻게 해야 하는지요?
언어구조상 100% 똑같이는 컨버팅할수 없고, 논리적으로 따져봤을때 2가지정도 해법이 있겠네요.
첫째, int keyarry = new int[ 8 * 256 ];
이런식으로 선언한후 C코드에서 keyarry[ 3 ][ 100 ]; 이렇게 사용할때, java에선 keyarry[ 3 * 256 + 100 ]; 이런식으로 사용하는 방법.
둘째, ArrayList< ArrayList< Integer > > keyarry = new ArrayList < ArrayList< Integer > >();
for( int i = 0; i < 8; ++i )
keyarry.add( new ArrayList< Integer >() );
이렇게 해서 사용할수도 있지만 사이즈가 동적 변동될수 있고, 메모리 블럭에 연속해서 데이터를 쌓을수 없고,
성능도 프리미티브 타입의 int를 쓰는게 아니라 클래스인 Integer를 써야하므로 희생을 감수해야하고,, 등등해서
의미적으로 보면 많이 다르죠. 단지 비스므리하게 흉내만 내는거죠.
첫째 방법이 원론적으로 보면 더 근접한 개념입니다. 원래 2차원 배열이란건 머쉰 입장에서 무의미하죠.
개발자 편리에 따라 논리적으로 만들어낸 개념일뿐.
답변 감사합니다...
vector를 사용해도 될까요? vector 라면 괜찮을 것도 같습니다..ㅎㅎ
답변 주셔서 감사합니다. ㅎㅎ
로그인 유지
언어구조상 100% 똑같이는 컨버팅할수 없고, 논리적으로 따져봤을때 2가지정도 해법이 있겠네요.
첫째, int keyarry = new int[ 8 * 256 ];
이런식으로 선언한후 C코드에서 keyarry[ 3 ][ 100 ]; 이렇게 사용할때, java에선 keyarry[ 3 * 256 + 100 ]; 이런식으로 사용하는 방법.
둘째, ArrayList< ArrayList< Integer > > keyarry = new ArrayList < ArrayList< Integer > >();
for( int i = 0; i < 8; ++i )
keyarry.add( new ArrayList< Integer >() );
이렇게 해서 사용할수도 있지만 사이즈가 동적 변동될수 있고, 메모리 블럭에 연속해서 데이터를 쌓을수 없고,
성능도 프리미티브 타입의 int를 쓰는게 아니라 클래스인 Integer를 써야하므로 희생을 감수해야하고,, 등등해서
의미적으로 보면 많이 다르죠. 단지 비스므리하게 흉내만 내는거죠.
첫째 방법이 원론적으로 보면 더 근접한 개념입니다. 원래 2차원 배열이란건 머쉰 입장에서 무의미하죠.
개발자 편리에 따라 논리적으로 만들어낸 개념일뿐.