2011-11-11 5 views
2

J'apprends C, actuellement des pointeurs.pointeur vers le pointeur?

#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; 
} 

Alors, j'ai ce code

et voici la sortie:

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 

Je me demande, pourquoi les valeurs du tableau (voir 2 dernières lignes) sont différentes à 10? .
Ma conjecture, ne pas envoyer le pointeur correct, mais, dans ce cas, où est stocké le tableau avec 10 ... 10 ?, est-il créé magiquement ??

grâce

+1

réattribuer explicitement ces valeurs avec 'w [i] [j] = i * 10 + j;' avant impression eux ... ce qui n'est pas clair? –

Répondre

1

Semble le programme est en train de faire exactement ce que vous avez programmé à faire.

La fonction f1 définit toutes les valeurs à 10

w[i][j]=10; 

les autres endroits, il mis à

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"); 
} 

vous configurez le tableau avec cette ligne: w [i] [j] = i * 10 + j;

La variable i est 0 ou 1 pour votre tableau de 2 elemements, donc:

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

Cela représente votre gamme de produits dans cette dernière série.

0

La sortie doit se tromper,

il devrait être aussi:

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