2011-12-11 12 views
5

¿Hay alguna manera de obtener la longitud de una matriz cuando solo conozco un puntero que apunta a la matriz?Obtener longitud de una matriz usando un puntero

Véase el siguiente ejemplo

int testInt[3]; 
testInt[0] = 0; 
testInt[1] = 1; 
testInt[2] = 1; 

int* point; 
point = testInt; 

Serial.println(sizeof(testInt)/sizeof(int)); // returns 3 
Serial.println(sizeof(point)/sizeof(int)); // returns 1 

(Esta es una snipplet del Código Arduino - Lo siento, no "hablar" real C).

Respuesta

11

La respuesta fácil es no, no se puede. Es probable que desee mantener una variable en la memoria que almacena la cantidad de elementos en la matriz.

Y hay una respuesta no tan fácil. Hay una forma de determinar la longitud de una matriz, pero para eso debería marcar el final de la matriz con otro elemento, como -1. Luego simplemente recorra y encuentre este elemento. La posición de este elemento es la longitud. Sin embargo, esto no funcionará con tu código actual.

Elija una de las de arriba.

+3

+1 Esta es una de esas cosas que C apesta. :) –

+1

@WTP Lo mismo para C++, excepto que 'std :: vector' se encargará de eso. –

1

Usted no puede y no debe intentar deducir longitud de la matriz usando puntero aritmética

si en la clase de C++ uso de vectores

3
  • Puede deducir la longitud de una matriz si tiene una variable de matriz.
  • No se puede inferir la longitud de una matriz si solo tiene un puntero.
1

Puede señalar si la totalidad de la matriz y no apunta al primer elemento como:

int testInt[3]; 
int (*point)[3]; 
point = testInt; 

printf("number elements: %lu", (unsigned long)(sizeof*point/sizeof**point)); 
printf("whole array size: %lu", (unsigned long)(sizeof*point)); 
+0

Excepto que en ese caso usted ya debe saber la longitud, lo que hace que el conteo sea bastante inútil. –

4

también haciendo un proyecto Arduino aquí ... Todo el mundo en el Internet parece insistir que es imposible para hacer esto ... y sin embargo, el truco más viejo del libro parece que funciona muy bien con matrices terminada en nulo ...

ejemplo para puntero char:

int getSize(char* ch){ 
     int tmp=0; 
     while (*ch) { 
     *ch++; 
     tmp++; 
     }return tmp;} 

magic ...

+1

Para una matriz de caracteres, puede obtener su tamaño fácilmente usando strlen() ya que utiliza el mismo método que se muestra arriba. Pero para una matriz de caracteres numéricos, simplemente no puedes. –

Cuestiones relacionadas