Ver Mensaje Individual
  #12 (permalink)  
Antiguo 15/05/2014, 05:44
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: problema con arreglo de estruturas

¡No! Has entendido mal.
En tu caso has creado un objeto de la estructura valores al cual le has llamado llamado p, y en ese caso p no es un puntero sino un objeto.
Es como crear una variable int variable, no tiene nada que ver con un puntero int *puntero = variable;
un puntero es una variable que apunta a otra variable simplemente.
Tu estructura "valores" es una variable ya que puedes cambiar los valores internos asi que una variable seria asi
struct valores {
int edad = 20;
} p;
struct valores * ptr;

ptr = &p;

Con pe accedes asi p.edad; pero con el puntero accedes asi *ptr.edad, ahi es cuando puedes poner el ->.

lo del (*ptr) es por lo que comenta Calgary, es que el operador punto . tiene mas prioridad que el operador * o sea si hago eso *ptr.edad pues puede que el compilador tome eso ptr.edad lo que es un objto no un puntero, ademas nisiquiera existe en nuestro caso lo que puede dar un error del copón XD haciendo eso (*ptr).edad obligamos a que primero se tome en cuenta el puntero después accedemos a edad. En ese caso es mas fácil usar ptr->edad. Es solo pensar... en el caso del objeto p.edad, es mas fácil que p->edad, no tienes sentido que hacer eso, solo si es un puntero y tuvieras que usar *ptr.edad o peor (*p).edad, recuerda lo ;)


Código C++:
Ver original
  1. #include <stdio.h>
  2.  
  3. struct alumno {
  4.     int edad;
  5.     char sexo;
  6. }p;
  7.  
  8.  
  9. int main() {
  10.  
  11.     struct alumno unAlumno;
  12.     struct alumno * ptr;
  13.    
  14.     //unAlumno->edad = 10; //Veras que esta linea da error, ponga el // delante para que compile
  15.    
  16.     ptr = &unAlumno;   // Asociamos unAlumno con el puntero ptr
  17.     ptr->edad = 10;    // Ahora si podemos acceder al campo edad con el operador ->
  18.    
  19.     //*ptr.edad = 20;    // Tampoco puedes hacer esto
  20.     ( *ptr ).edad = 20;  //
  21.    
  22.     p->edad = 100;       //Como ves p no es un puntero sino mas bien un objeto como los es unAlumno
  23.    
  24.     //Esto es un objeto
  25.     //struct alumno unAlumno;
  26.    
  27.     //Esto es un puntero
  28.     //struct alumno * ptr;
  29.    
  30.     //p es un objeto no un puntero. Es como si hiciera eso para crearlo:struct alumno p;
  31.     //para que pe sea un puntero debes crearlo asi: struct alumno * p; entonces despues de asignarle un objeto al que apuntar puedes usar el ->
  32.     //struct alumno {
  33.     //  int edad;
  34.     //  char sexo;
  35.     //} p;
  36.    
  37.     //Si aun no entiendes los punteros debes entenderlos bien, volver a leer una y otra vez hasta comprenderlos.
  38.     //Si tiene dificultades para entenderlos debes practicar bastante con ellos. Pide ayuda en el foro si no entiendes algo.
  39.    
  40.     return 0;
  41. }

Si no entiendes sigue preguntando ;)


Última edición por vangodp; 15/05/2014 a las 05:59