Título: Punteros y arrays. Publicado por: Gojira en 3 Marzo 2018, 12:40 pm He intentado asignar a un puntero la variable x que es de tipo entero directamente, y me pedia el operador de referencia.
int * ptr = x; //no me deja int * ptr = &x; //si me deja Luego he creado un array, y he intentado asignar a un puntero el array con el operador de referencia, y me pedia que le quitara el operador de referencia y apuntara directamente al array. int x[5] = {1,2,3,4,5}; int * ptr = x; //si me deja int * ptr = &x; //no me deja ¿Por que es eso? ¿Los arrays son un conjunto de punteros, x seria la direccion del valor de la primera celda del array x en realidad y int * ptr = &x es pedir la direccion de una direccion? Título: Re: Punteros y arrays. Publicado por: MAFUS en 3 Marzo 2018, 13:38 pm Cómo ya te he dicho en otros mensajes sobre punteros, el nombre de un array es la dirección del primer elemento. Por eso lo puedes y debes asignar directamente.
Título: Re: Punteros y arrays. Publicado por: vangodp en 3 Marzo 2018, 15:05 pm x equivale a &x[0], por eso
No puedes hacer: int * ptr = &x; Pero puedes hacer: int * ptr = &x[0]; x y &x[0] son lo mismo, como ya te lo han dicho. Título: Re: Punteros y arrays. Publicado por: Kenji-chan en 4 Marzo 2018, 03:24 am enrealid es por que en c solo pudes asignar o igualar valores del mismo tipo,
int = variable de interos & operador de direccion (solo cuando esta acompañado de una variable ejm &x) * operador de indireccion (solo cuando esta acompañado de una variable ejm *x) entonces si los combinamos obtenemos: int a = 20; // variable de tipo entero int* x = &a; // una variable que almacena direcciones de memoria de tipo entero int* b = x; // una variable que almacena direcciones de memoria de tipo entero (y como x es un puntero no necesitamos agregar el operador de diseccionar) bien ahora para usar los punteros se usa el operador de indireccion *x += 10; con esto modificamos el valor de la variable a la cual apunta x y be ya que es la misma dirección porque la igualamos a la dirección a la que apunta x. bie haora que pasa con un int x[5] = {1,2,3,4,5}; lo que estamos haciendo aqui es declarar 5 punteros de tipo int consecutivos osea uno después del otro, y si hacemos un cout << *x << endl; imprimimos imprimimos el primer elemento de x (x[0] seria lo mismo) y para recorrerlo hacemos un *x++ y nos iriamos a la siguiente posición (lo cual no recomido si no dominas el tema de los punteros ya que con esto bas saltando en la memoria ram (int) bits (int = 4 bits)) por lo tanto si hacemos un int x[5] = {1,2,3,4,5}; int* b = x; //obtenemos la primera posicion de x ya que x es un puntero te dejo un codigo de ejemplo: Código: #include <iostream> |