2009-08-10 4 views
2

플로트 rtmp1 [NMAX * 3] [3]의 배열을 가지고 있으며 rtmp1 [i] [n]으로 사용됩니다. 여기서 n은 0에서 2까지입니다. 나는 0에서 3 * NMAX - 1입니다. 그러나 rtmp1을 rtmp1 [3 * 3 * NMAX]로 변환하고 싶습니다. 이 새로운 1D 배열을 rtmp1 [3 * i + n]으로 처리하면 rtmp1 [i] [n]과 동일할까요? 설명에 미리 감사드립니다.C++ : 2D 배열과 1D 배열의 차이점

+0

0에서 (3 * NMAX) - 1일까요? – KTC

+0

명확히하십시오. "i는 0에서 2"또는 rtmp1 [3 * 4 * NMAX]입니까? –

+0

@KTC : 예, 해결했습니다. @bill weaver : 질문을 명확히하십시오. – stanigator

답변

4

rtmp1은 [I] [N] rtmp1 할 동등한

하여 NMAX가 http://www.cplusplus.com/doc/tutorial/arrays/을 참조 [내가 NMAX + 않음은 *] 너비.

+0

내가하려고 한 주된 목표는 2D 배열을 의사 2D 배열로 변환하는 것입니다. 당신의 대답은 제가 받아들입니다. 감사. – stanigator

0

예,하지만 이것을 증명하여 무엇을 증명하려고합니까? rtmp1 [i] [n]은 더 나은 실행 시간을 가지며 읽기 쉽습니다.

"사실, rtmp [i + 3 * n]을 사용하고 싶습니다."차이점은 무엇입니까? 주소를 바꾸는 것뿐입니다.

+0

런타임까지 크기를 알지 못하기 때문에 rtmp1을 1D 배열로 동적으로 할당하려고합니다. NMAX는 정적으로 할당 할 수있는 정말로 큰 수입니다. 현재 구현은 메모리 소비에 있어서는 매우 빈민가입니다. – stanigator

0

별칭 방지 규칙을 위반하지 않을지 잘 모르겠습니다. 저의 독서는 괜찮습니다.하지만 저는 이미 잘못되었습니다. 표준의 다른 부분에서 두 가지 상충되는 규칙 중 어느 것이 우선 순위를 차지하는지를 알기 위해 때로는 전체 영역이 혼란스럽고 과감한 경우가 있습니다.

Exemple :

typedef float Point[3]; 

void f(float* tab, Point* pt) 
{ 
    (*pt)[2] = 6; 
    // I don't think the compiler can assume that (*pt)[2] isn't modified by 
    tab[5] = 3.141592; 

}

// context which give a problem if I'm wrong. 
float rtmp1[NMAX*3][3]; 
float *ptr = &rtmpl[0][0]; 
f(ptr, rtmpl[1]); 
관련 문제