2014-01-22 3 views
0

"header"는 구조체의 개체이며 header.img의 값은 496입니다. 헤더 구조체에는 3 개의 정수 요소가 있으므로 값은 12 바이트입니다. (고려 4 바이트 int)누구든지이 코드 조각을 설명해 주시겠습니까?

double** MatrixBuffers = new double* [header.img]; 
    MatrixBuffers[0] = new double[header.img* 12]; 
    for (unsigned int i=1; i<header.img; ++i) { 
     MatrixBuffers[i] = MatrixBuffers[0] + i * 12; 
    } 
    globaldata.adv_MatrixBuffers = MatrixBuffers; 

나는 MatrixBuffers가 496 개의 double에 대한 포인터라는 것을 알고있다. 하지만 두 번째 줄에서 무슨 일이 벌어지고 있는지 이해하지 못합니다.

MatrixBuffers[0] = new double[header.img* 12]; 

1.이 뜻은 MatrixBuffers [0]은 496 * 12 배로의 포인터입니까? 2. for 루프에서 무슨 일이 일어나고 있습니까? 3. 나중에 코드에서 MatrixBuffer [0]이 함수로 전달됩니다. 이것은 MatrixBuffers [0]에 기본 주소 인 포인터를 전달한다는 것을 의미합니까?

답변

0

이중 포인터의 경우 첫 번째 차원뿐만 아니라 두 번째 차원에도 메모리를 할당해야합니다. 하나에서 그는 메모리를 할당하는 대신 모든 차원에 대한 메모리를 할당의 두 번째 수준에 대한

는 루프가 주소를 이동하고 모든 인덱스에 동일한을 할당 내부

MatrixBuffers[0] = new double[header.img* 12]; 

촬영.

대신 그는 또한 for 루프 내에서 다음과 같이 수행 및 루프

MatrixBuffers[i] = new double[header.img]; 
+0

미안 해요에 대해 위의 라인을 코멘트 수, 꽤 이해하지 못했다. 조금만 백업 해 줘. MatrixBuffers가 P [0] ---- P [495]라고하는 496 개의 double에 대한 포인터라고합니다. 이 작업이 실행되면 MatrixBuffers [0] = new double [header.img * 12]; MatrixBuffers [0]은 496 * 12 개의 double에 대한 포인터입니까? K [0] --- K [47520]라고 말하십시오. P [0]이 K [0]을 가리키고 있다는 것을 이해합니다. for 루프에 아래 코드를 작성하고 위 코드에 주석을 달아주는 것과 같은가요? MatrixBuffers [i] = 새로운 Double [12]; 감사합니다. –

+0

예 ... 우리가 할당 한 모든 색인에 대해 12 바이트의 메모리를 할당하거나 할당합니다. 내가 설명했듯이, 당신은 한 번 할당하고 동일한 인덱스를 다른 인덱스에 할당하거나 모든 인덱스에 개별적으로 할당 할 수 있습니다. – Raghuram

+0

따라서 주어진 코드에서 MatrixBuffers [0]에는 496 * 12 배가 메모리가 있습니다. MatrixBuffers [1 to 495]에는 12 바이트의 메모리가 있습니까? –

관련 문제