Cita:
Iniciado por Principe_Azul Hola, no sabía que el -> era lo mismo que hacer *, osea es un puntero, buen dato. Gracias!!
Cita: no sabía que el -> era lo mismo
A ver realmente no son lo mismo eso es lo que son:
(*p).edad = 1; // Desreferenciar y acceder al campo edad.
p->edad = 2; // Acceso al campo edad con el operador flecha.
no puedes crear un puntero así:
int -> p; ni hacer ninguna otra cosa que sea para
acceder al contenido desde el puntero
Esto es un puntero * y eso -> solo te permite acceder con -> a un campo desde un puntero ;)
Bueno esto no lo entenderías sin un código así que aquí va XD
Código C:
Ver original#include <stdio.h>
struct alumno {
int edad;
char sexo;
};
int main() {
struct alumno unAlumno; // Creamos una estructura tipo alumno y la llamamos unAlumno.
struct alumno * p; // Creamos un puntero tipo alumno y lo llamamos p.
unAlumno->edad = 10; //Veras que esta linea da error, ponga el // delante para que compile.
//La linea anterior da error por que unAlumno no es un puntero, solo puedes usar -> para acceder
//al campo edad desde un puntero.
p = &unAlumno; // Asociamos unAlumno con el puntero p
p->edad = 10; // Ahora si podemos acceder desde p al campo edad con el operador ->
*p.edad = 20; // Tampoco puedes hacer esto. Para que funcione ponga el // delante.
(*p).edad = 20; // Pero si obligas primero que se desreferencie con los operadores () ¡¡¡Funciona!!!
//Al poner () en *p "(*p)" es como decir "Primero desreferencie y después acceda a la variable edad"
//-> quiere decir accede al campo edad;
//Por tanto (*p).edad y p->edad hacen lo mismo pero no son exactamente lo mismo ;)
return 0;
}
Intenta compilar esto.
Te va tirar error en algunas lineas y es que lo hice a propósito para que veas el funcionamiento de (*p).edad y p->edad.
En la linea que tire error ponga // delante a efecto de convertir la linea en comentario.
Observe el error emitido por el compilador y la linea donde esta el error.
Las lineas que van a dar error son linea 14 y 21, es solo para que veas.
En la linea 14 intento acceder a el campo edad con el operador -> desde un objeto alumno, Como es un objeto y no un puntero pues FAIL XD
Luego veras el -> trabajando desde un puntero.
Y por ultimo se ve la similitud que tienen (*p) y p->
-> nos viene mejor que (*p) por razones obvias..¿Que es mas fácil?:
p->edad;
o
(*p).edad;
No se tu me parece que -> es mas fácil
Así que si pasas un puntero a una función o lo que sea puedes usar el -> para acceder a sus campos dentro de dicha función, esto esta a la orden del día en c++ ;)
Entender como funciona las cosas es mejor que suponer, y no soy tan fiera en los punteros pero si quieres un consejo, gástate tiempo en entenderlos por que solo así vas a lograr dominar c/c++ ;)
Si alguien quiere seguir aportando información o ve algo malo, me encanta aprender :D