¡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#include <stdio.h>
struct alumno {
int edad;
char sexo;
}p;
int main() {
struct alumno unAlumno;
struct alumno * ptr;
//unAlumno->edad = 10; //Veras que esta linea da error, ponga el // delante para que compile
ptr = &unAlumno; // Asociamos unAlumno con el puntero ptr
ptr->edad = 10; // Ahora si podemos acceder al campo edad con el operador ->
//*ptr.edad = 20; // Tampoco puedes hacer esto
( *ptr ).edad = 20; //
p->edad = 100; //Como ves p no es un puntero sino mas bien un objeto como los es unAlumno
//Esto es un objeto
//struct alumno unAlumno;
//Esto es un puntero
//struct alumno * ptr;
//p es un objeto no un puntero. Es como si hiciera eso para crearlo:struct alumno p;
//para que pe sea un puntero debes crearlo asi: struct alumno * p; entonces despues de asignarle un objeto al que apuntar puedes usar el ->
//struct alumno {
// int edad;
// char sexo;
//} p;
//Si aun no entiendes los punteros debes entenderlos bien, volver a leer una y otra vez hasta comprenderlos.
//Si tiene dificultades para entenderlos debes practicar bastante con ellos. Pide ayuda en el foro si no entiendes algo.
return 0;
}
Si no entiendes sigue preguntando ;)