TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Thulsa Doom en 20 de Septiembre de 2011, 15:39:56

Título: Duda sobre arrays unidimensionales
Publicado por: Thulsa Doom en 20 de Septiembre de 2011, 15:39:56
Hola, tengo una duda con los arrays unidimensionales, se que un array es por ejemplo.

int data[8];

según puedo interpretar en las diversas publicaciones que explican esto, este array está compuesto por 8 posiciones de memoria y cada una está formada por un int, sería data[0], data[1], data[2]......data[7], menos el último (data[8]) que es un /0 que es el final del array ¿es esto cierto?.

si esto es así como un int es un entero de 1 byte (8bits), cada posición anteriormente mencionada corresponde a 8bits, ósea data[0] = 8bits, data[1] = 8bits ..... data[7]=8bits, ¿estoy en lo correcto?.
Título: Re: Duda sobre arrays unidimensionales
Publicado por: Suky en 20 de Septiembre de 2011, 15:49:12
según puedo interpretar en las diversas publicaciones que explican esto, este array está compuesto por 8 posiciones de memoria y cada una está formada por un int, sería data[0], data[1], data[2]......data[7], menos el último (data[8]) que es un /0 que es el final del array ¿es esto cierto?.

data[8] no existe, pues tu arreglo tiene 8 posiciones. El tema de caracter nulo es solo si trabajas con string, por ejemplo:

int data[8]="Hola";

data[0]='H', data[1]='o',data[2]='l',data[3]='a',data[4]='\0'

si esto es así como un int es un entero de 1 byte (8bits), cada posición anteriormente mencionada corresponde a 8bits, ósea (http://www.cristianventura.com.ar/2008/02/29/o-sea-osea-osea/) data[0] = 8bits, data[1] = 8bits ..... data[7]=8bits, ¿estoy en lo correcto?.

Si.


Saludos!
Título: Re: Duda sobre arrays unidimensionales
Publicado por: Thulsa Doom en 20 de Septiembre de 2011, 18:12:42
vale,

otra cosa.

¿cuando se trabaja con datos numéricos no lleva ese carácter nulo?

¿se puede copiar el dato de una de las posiciones en una variable?
me refiero por ejemplo si tengo

int data[3];
y en la posición data[0] hay b00000001 y en la posición data[1] hay b00000010, ¿la posición data[0] se puede copiar a una variable por ejemplo llamada:
int valor1;

se que se pueden utilizar punteros tipo
x = &data[0];    //esto hace que x apunte al elemento cero de data
y = *x;             //esto hace que "copie" el contenido de data[0] en y

pero no se si esto copia el contenido de data[0] a la variable 'y' o simplemente enruta 'y' al dato que está en data[0]
Título: Re: Duda sobre arrays unidimensionales
Publicado por: Suky en 20 de Septiembre de 2011, 19:12:07
Citar
¿cuando se trabaja con datos numéricos no lleva ese carácter nulo?

No, se trabaja con cada valor en particular. El carácter nulo se utiliza para saber que termino el string, entonces uno con un while puede recorrerlo hasta encontrar dicho carácter.

Citar
¿se puede copiar el dato de una de las posiciones en una variable?

Si, tan sencillo como:

int data[3];
int valor1;

Valor1=data[0];

Respecto a punteros, hay bastante información online para estudiar detenidamente y practicar.


Saludos!
Título: Re: Duda sobre arrays unidimensionales
Publicado por: MerLiNz en 20 de Septiembre de 2011, 19:24:05
lo del tamaño depende del compilador, por ejemplo el c18 un int son 16bits, (2bytes) un char 8bits(1byte), es algo que debes tener muy en cuenta con los pics.

El ultimo numero del array no se usa, si pones 8 quieres decir que tienes un array desde 0 hasta 7  (ambos incluidos), osea un arreglo de 8.

En una string unicamente se le pone el 0 despues del ultimo caracter para que si trabajamos con una funcion que maneje strings (strcat por ejemplo) toma el 0 como el final de la "palabra", osea un "hola" tendria un tamaño de 5 bytes, el 5º byte es el 0 que "delimita" el final de la palabra".

Los punteros son sencillos y a la vez liosos.

si tu declaras un int *a; estas diciendo que en la "variable a" apuntara a una direccion de memoria.
Osea imaginemos, si ponemos a=0xFF; estamos diciendo que "a" esta apuntando a la memoria direccion de memoria 0xFF.

Ahora queremos que un puntero apunte a la memoria de otra variable.

int *a, var;
a=&var (el & se pone para indicar que queremos saber su direccion de memoria).

si var esta almacenado en la ram, en la posicion 0x01 de la ram, entonces "a" apuntara tambien a 0x01.

ahora queremos saber que "valor" contiene nuestra posicion de memoria, seria asi:

int *a, var, b;
a=&var;
b=*a; (el * se pone para que te muestre el VALOR DE LA DIRECCION A LA QUE APUNTA "a"). si var vale 90, entonces *a tambien vale 90, y b en este caso tambien valdra 90.
Título: Re: Duda sobre arrays unidimensionales
Publicado por: Suky en 20 de Septiembre de 2011, 21:39:26
Por acá dejé un tutorial sobre punteros bastante completo, con varios ejemplos:  ;-)

http://www.ucontrol.com.ar/forosmf/programacion-en-c/tutorial-sobre-punteros-en-c-ansi/msg29815/#msg29815

Título: Re: Duda sobre arrays unidimensionales
Publicado por: Thulsa Doom en 21 de Septiembre de 2011, 04:53:23
Muchas gracias a todos por la ayuda, estudiaré el documento