2012-09-21 90 views
0

我想實現一個使用雙指針的二維數組。我試圖實現的方式是根據其物理表示將其視覺化。例如,考慮一個2×2矩陣和它的物理表示是雙指針實驗二維數組

 c1 c2 

R1 - > A00 A01
R2 - > A10 A11

步驟1:創建一個雙指針以指向到第一行
步驟2:創建第一級指針指向c1的地址步驟3:從用戶輸入
步驟4:創建第一級指針poi NT才能的C2
步驟5的地址:從用戶
步驟6輸入:遞增行指針爲指向R2
步驟7:從步驟重複2至5

下面是實現的代碼的代碼段由我:

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    int **p,***temp; 
    p = (int **)malloc(nRows*sizeof(int *)); 
           //Allocating memory for two rows, now p points to R1 
    temp = &p; //storing the address of p to restore it after storing the values 
    for(int i=0;i<nRows;i++) 
    { 

     for(int j=0;j<nCols;j++) 
     { 
      *(p+j) = (int *)malloc(sizeof(int)); 
           //Allocating memory for col , now *p points to C1 
      scanf("%d",*(p+j)); 
     } 
     p += 1;  // NOw p is pointing to R2 
    } 

    p = *temp;   // restoring the base address in p; 
    for(int i=0;i<nRows;i++) 
    { 
     for(int j=0;j<nCols;j++) 
      printf("%d",*(p+j)); 
        // In first iteration print values in R1 and R2 in second iteration 
     p += 1;  // points to the next row 
    } 

    getch(); 
    return 0; 
} 

該scanf似乎工作正常。但在printf中,我得到了不穩定的結果。它開始指向一些其他的位置

你能讓我知道如何以前面說過的方式實現這個二維數組嗎?我正在練習 這個練習,目的只是爲了深入瞭解雙指針的工作。

+0

我是新來的編程和嘗試學習..所以請幫助 – user1611753

+0

開始理解簡單的1D數組,以及數組和指針之間的關係或非關係... –

+0

這裏有一個鏈接,你需要什麼知道:http://stackoverflow.com/questions/12462615/how-do-i-correctly-set-up-access-and-free-a-multidimensional-array-in-c – Mike

回答

0

這條線:

printf("%d",*(p+j)); 

實際打印的指針列j(因爲p指向的行,而不是行元素)。您可以通過提領一次解決它:

printf("%d",p[i][j])); 

,並從第二循環刪除

p += 1; 

此外,您的代碼很難閱讀,儘量避免***temp並重新分配指針隔行。