terça-feira, 13 de setembro de 2016

Matriz em C - entendendo a estrutura

C++ code colored by C++2HTML
#include <stdio.h>
#include <stdlib.h>

void main (void) {
   int m[10][12];
   int i, j;
   /*Usa uma funcao para mapear uma matriz 10x12 no array de 120 elementos.*/
   for (i=0;i<10;i++) {
      for (j=0;j<12;j++) {
         m[i][j]=i+j*12+1000;
      }
   }
   for (i=0;i<10;i++) {
      for (j=0;j<12;j++) {
         printf ("%d ", m[i][j]);
      }
   }
   /*Tentando hackear a estrutura:*/
   for (i=0;i<10;i++) {
      printf ("%p ", m[i]);  /* eh ponteiro?*/
   }
   /*Sim! mas veja os valores: eles saltam de 48 em 48 bytes - 
     a região de memória eh continua! */
   /* o conteudo eh ponteiro ou eh inteiro? */
#if 0
   for (i=0;i<10;i++) {
      printf ("%p ", *(m[i]));  /* o conteúdo eh ponteiro?*/
   }
/*
fabio@fabio-virtual-machine:~/Documents/array$ gcc matriz.c 
matriz.c: In function ‘main’:
matriz.c:26:15: warning: format ‘%p’ expects argument of type ‘void *’, but argument 2 has type ‘int’ [-Wformat=]
       printf ("%p ", *(m[i]));  
               ^
o erro indica que o conteúdo é inteiro!!!!
*/
#endif
   for (i=0;i<10;i++) {
      printf ("%d ", *(m[i]));  /* eh inteiro entao...*/
   }

}

Um comentário: