2013-05-25 1 views
2
int** mat = new int*[5]; 

// define the elements to be inserted to the matrix  
int* i1 = new int; 
*i1 = 1; 

int* i2 = new int; 
*i2 = 2; 

int* i3 = new int; 
*i3 = 3; 

int* i4 = new int; 
*i4 = 4; 

int* i5 = new int; 
*i5 = 5; 

// insert the elements to the matrix 
mat[0] = i1; 
mat[1] = i2; 
mat[2] = i3; 
mat[3] = i4; 
mat[4] = i5; 

이제 포인터를 정의합니다. 이 포인터를 통해 행렬을 인쇄하고 싶습니다. 그래서 그것을 정의 : 여기포인터를 통해 행렬을 인쇄하십시오.

int* ptr = *mat; 

을하고 나는 그것을 인쇄 :

for (int i = 0; i < 5; i++) { 
    cout << *ptr << endl; 
    ptr++; 
} 

그러나 나는 가지고 :

1 
2543679 
9826 
257678 
7853 

내가 포인터를 통해 인쇄 할 것을 기억하십시오 (및 수행 it ++)은 ptrfor loop의 내용과 만 관련됩니다.

답변

4
int* ptr = *mat; 

그래서 당신은 i1 같은 장소 ptr 점을하자

int *ptr = i1; 

여기에 해당합니다. 그런 다음 ptr을 증가 시키면 int 뒤의 점 하나가 i1이됩니다. 거기에 메모리를 할당하지 않았으므로 증가 된 포인터를 역 참조하면 정의되지 않은 동작이 호출됩니다 (그리고 참조를 증가 시키면 더 이상 참조가없는 경우에도 정의되지 않은 동작이 호출됩니다). (
for(int i = 0; i < 5; ++i) { 
    cout << *mat[i] << endl; 
} 

더 읽을 수 것이나 사용 첨자

)

+0

바하마, 그것으로 나를 이길

, 당신은

int **ptr = mat; for (int i = 0; i < 5; i++) { cout << **ptr << endl; ptr++; } 

을 필요 배열을 이동하려면 P를 또한 당신을 행을 추가하여 각 행에 대해 새로운 int [no_of_columns]를 원할 것임을 명확히 할 수 있습니까? – cristicbz

+0

@ 다니엘 피셔, 와우, 고마워! –

관련 문제