2011-11-11 19 views
2

私は現在Cのポインタを学習しています。ポインタへのポインタ?

#include <cstdio> 
#include <cstring> 
#include <cstdlib> 

using namespace std; 

int f1(int **w){ 
    for (int i=0;i<2;i++){ 
     for (int j=0;j<10;j++){ 
      w[i][j]=10; 
      printf("%d ",w[i][j]); 
     } 
     printf("\n"); 
    } 
    printf("----\n"); 
} 

int main() { 


    int **w = (int **) malloc(sizeof(int*)*2); 
    for (int i=0;i<2;i++) 
     w[i] = (int*)malloc(sizeof(int)*10); 

    for (int i=0;i<2;i++){ 
     for (int j=0;j<10;j++){ 
      w[i][j]=i*10 + j; 
      printf("%d ",w[i][j]); 
     } 
     printf("\n"); 
    } 
    printf("---\n"); 
    f1(w); 
     for (int i=0;i<2;i++){ 
     for (int j=0;j<10;j++){ 
      w[i][j]=i*10 + j; 
      printf("%d ",w[i][j]); 
     } 
     printf("\n"); 
    } 

    return 0; 
} 

だから、私はこのコードに

を持っており、ここに出力されます:私は思ったんだけど

0 1 2 3 4 5 6 7 8 9 10 
11 12 13 14 15 16 17 18 19 
--- 
10 10 10 10 10 10 10 10 10 10 
10 10 10 10 10 10 10 10 10 10 
---- 
0 1 2 3 4 5 6 7 8 9 10 
11 12 13 14 15 16 17 18 19 

、WHY配列値(最後の2行を参照)が10に異なっているの? 。
正しいポインタを送信していないと思いますが、その場合、10 ... 10という配列がどこに格納されていますか?

おかげ

+1

;'あなた印刷する前に彼ら...不明な点は何ですか? –

答えて

1

プログラムはあなたがするそれをプログラムした、まさにやっているようです。 [i]はW:

F1ファンクションは10

w[i][j]=10; 

へのすべての値は、他の場所は、あなたがこの行と列を設定している

w[i][j]=i*10 + j; 
0
for (int i=0;i<2;i++){ 
    for (int j=0;j<10;j++){ 
     w[i][j]=i*10 + j; 
     printf("%d ",w[i][j]); 
    } 
    printf("\n"); 
} 

に設定します設定します[j] = i * 10 + j;

私は、2 elemementsのあなたの配列のための0または1のいずれかである変数:

0*10 + 0 = 0... 
0*10 + 9 = 9... 
1*10 + 0 = 10... 
1*10 + 9 = 19 

これは、その最後のセットで出力のあなたの全体の範囲を占めています。

0

出力が間違っている必要があり、

それはようでなければなりません:あなたは明示的に `[I] [J] =私は10 + JをW *と、これらの値を再割り当て

0 1 2 3 4 5 6 7 8 9 
10 11 12 13 14 15 16 17 18 19 
関連する問題