Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[Duda] punto vs flecha
Autor Mensaje
nanohueso Sin conexión
Campeon del cubo Rubik
Thats what she said
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 194
Agradecimientos dados: 151
Agradecimientos: 15 en 11 posts
Registro en: Feb 2012
Mensaje: #1
[Duda] punto vs flecha Ejercicios Informática I (Electrónica)
Hola gente, estoy teniendo problemas para saber cuando utilizar la flecha y el punto cuando tengo que acceder a algun campo de una estructura.

Por ejemplo si yo tengo:


struct sData {
char Nombre[30];
char Apellido[30];
unsigned char Edad;
};

typedef struct Snode{
struct sData *dato;
struct Snode *ptr;
}SNODE;

int main(void)
{
SNODE buff;
SNODE *H;
// ingresas , lo guardas , se lo pasas a la funcion y ella lo enlista

H=NULL;
[b] buff.dato = (struct sData*) malloc(sizeof(struct sData));[/b]

printf("\n Ingrese nombre:");
scanf("%s",buff.dato->Nombre);

while(strcmp(buff.dato->Nombre,"FIN")!= 0)
{

printf("\n Ingrese apellido:");
scanf("%s",buff.dato->Apellido);
printf("\nIngrese edad:");
scanf("%c",&(buff.dato->Edad));

ingreso_simple_alfinal(buff,&H);

printf("\n Ingrese nombre:");
scanf("%s",buff.dato->Nombre);
}
return 0;
}




La linea que esta en negrita : buff.dato = (struct sData*) malloc(sizeof(struct sData)); esa linea no entiendo porque se usa punto, osea porque buff.dato , si dato es un puntero entonces deberia ser buff->dato , pero no porque cuando compilo me tira error: invalid type argument of ‘->’ (have ‘SNODE’)
La verdad que me mareo , si no compilo no se si esta bien o mal.

Un saludo a todos!
23-01-2014 12:37
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Dios Sin conexión
Presidente del CEIT
.
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.057
Agradecimientos dados: 33
Agradecimientos: 150 en 129 posts
Registro en: Dec 2011
Mensaje: #2
Re: [Duda] punto vs flecha
Flecha es cuando tenés un puntero a estructura y punto cuando es una variable estructura.

Buff es una variable estructura, necesitás el punto para acceder al campo. Si tuvieras que acceder a un campo de dato sería buff.dato->campo

«(…)Se arman paquetes… ¿eh?… tecnológicos… tecnológicos portes de… en donde están… este… interrelacionados con las otras capas.(…)»
(Este mensaje fue modificado por última vez en: 23-01-2014 12:56 por Dios.)
23-01-2014 12:53
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nanohueso Sin conexión
Campeon del cubo Rubik
Thats what she said
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 194
Agradecimientos dados: 151
Agradecimientos: 15 en 11 posts
Registro en: Feb 2012
Mensaje: #3
RE: [Duda] punto vs flecha
(23-01-2014 12:53)Dios escribió:  Flecha es cuando tenés un puntero a estructura y punto cuando es una variable estructura.

si es asi como decis vos, entonces porque funciona haciendo buff.dato ? , deberia ser buff->dato...
23-01-2014 12:56
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Dios Sin conexión
Presidente del CEIT
.
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.057
Agradecimientos dados: 33
Agradecimientos: 150 en 129 posts
Registro en: Dec 2011
Mensaje: #4
Re: [Duda] punto vs flecha
Ahora estoy desde el celular. Si no se entiende bien lo que escribo en un rato lo hago mejor desde una computadora.

«(…)Se arman paquetes… ¿eh?… tecnológicos… tecnológicos portes de… en donde están… este… interrelacionados con las otras capas.(…)»
23-01-2014 13:00
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Feer Sin conexión
Presidente del CEIT
win-win
**********

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 4.626
Agradecimientos dados: 604
Agradecimientos: 2.625 en 428 posts
Registro en: Apr 2010
Mensaje: #5
RE: [Duda] punto vs flecha
(23-01-2014 12:56)nanohueso escribió:  
(23-01-2014 12:53)Dios escribió:  Flecha es cuando tenés un puntero a estructura y punto cuando es una variable estructura.

si es asi como decis vos, entonces porque funciona haciendo buff.dato ? , deberia ser buff->dato...


Proba si lo queres hacer así poniendo: SNODE *buff;

[Imagen: digitalizartransparent.png]
23-01-2014 13:04
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nanohueso Sin conexión
Campeon del cubo Rubik
Thats what she said
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 194
Agradecimientos dados: 151
Agradecimientos: 15 en 11 posts
Registro en: Feb 2012
Mensaje: #6
RE: [Duda] punto vs flecha
pero a ver si entiendo , la flechita no depende dato , sino de buff ?
23-01-2014 13:28
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Feer Sin conexión
Presidente del CEIT
win-win
**********

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 4.626
Agradecimientos dados: 604
Agradecimientos: 2.625 en 428 posts
Registro en: Apr 2010
Mensaje: #7
RE: [Duda] punto vs flecha
La flechita depende de si el tipo de dato es puntero o variable =P
Eso es lo que me acuerdo yo

[Imagen: digitalizartransparent.png]
23-01-2014 13:32
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Santi Aguito Sin conexión
Presidente del CEIT
Newtoniano
********

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 1.238
Agradecimientos dados: 229
Agradecimientos: 614 en 335 posts
Registro en: Oct 2012
Mensaje: #8
RE: [Duda] punto vs flecha
Como dicen arriba, cuando querés acceder a un campo de una variable estructura, usas el punto. Cuando en cambio, tenes un puntero a una estructura usas la flecha.

Fijate, en tu código, creas una variable llamada struct sData, osea una estructura. Después, lo siguiente que haces es declarar un tipo de dato SNODE, el cual es una estructura, y que tiene un puntero a un struct sData llamado dato como uno de sus campos.

Cuando vos haces:

buff.dato = (struct sData*) malloc(sizeof(struct sData));

Es correcto que uses el punto, ya que buff es un tipo de dato SNODE (osea, una estructura), y vos querés acceder a su campo dato, el cual es un puntero a una estructura...pero no te importa, te abstraes de eso...queres acceder a un campo de esa estructura?, usas el punto entonces.

Busca la excelencia, el éxito llegará
(Este mensaje fue modificado por última vez en: 23-01-2014 14:38 por Santi Aguito.)
23-01-2014 14:36
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Santi Aguito recibio 1 Gracias por este post
nanohueso (23-01-2014)
Dios Sin conexión
Presidente del CEIT
.
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.057
Agradecimientos dados: 33
Agradecimientos: 150 en 129 posts
Registro en: Dec 2011
Mensaje: #9
RE: [Duda] punto vs flecha
(23-01-2014 13:28)nanohueso escribió:  pero a ver si entiendo , la flechita no depende dato , sino de buff ?

La sintaxis genérica es



punteroAEstructura->campo



Si campo también es un puntero a estructura, es así:



punteroAEstructura->campo->otroCampo



Ahora bien, si tenés una estructura igual, pero empezás con una variable y no un puntero es


estructura.campo



y para el otro


estructura.campo->otroCampo




Resumiendo, sí: el operador flecha (->) aplica a punteros y el operador punto (.) aplica a variables tipo estructura.

Si tenés un puntero a estructura y querés aplicar el operador punto deberías hacer algo así:


struct lala variable;
struct lala *puntero;

puntero = &variable;
(*puntero).campo;



porque el asterisco antes de un puntero hace que se comporte como la variable en sí...

No sé hasta qué punto les enseñan formalmente la sintaxis del lenguaje en electrónica, pero supongo que no la compliqué demasiado.

Para aplicarlo a tu código, fijate que tenés:



SNODE buff;




entonces buff no es un puntero, por lo tanto tenés que usar el operador punto.

«(…)Se arman paquetes… ¿eh?… tecnológicos… tecnológicos portes de… en donde están… este… interrelacionados con las otras capas.(…)»
(Este mensaje fue modificado por última vez en: 01-02-2014 00:53 por Dios.)
23-01-2014 15:39
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Dios recibio 1 Gracias por este post
nanohueso (23-01-2014)
nanohueso Sin conexión
Campeon del cubo Rubik
Thats what she said
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 194
Agradecimientos dados: 151
Agradecimientos: 15 en 11 posts
Registro en: Feb 2012
Mensaje: #10
RE: [Duda] punto vs flecha
Lo entendi perfectamente , les agradezco Santi Aguito y Dios
23-01-2014 15:48
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Dios Sin conexión
Presidente del CEIT
.
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.057
Agradecimientos dados: 33
Agradecimientos: 150 en 129 posts
Registro en: Dec 2011
Mensaje: #11
RE: [Duda] punto vs flecha
(23-01-2014 13:04)Feer escribió:  
(23-01-2014 12:56)nanohueso escribió:  
(23-01-2014 12:53)Dios escribió:  Flecha es cuando tenés un puntero a estructura y punto cuando es una variable estructura.

si es asi como decis vos, entonces porque funciona haciendo buff.dato ? , deberia ser buff->dato...


Proba si lo queres hacer así poniendo: SNODE *buff;

Así como está su código, eso va a ser sintácticamente correcto pero semánticamente no. Además va a dar un error de segmentación porque buff va a tener "basura", debería inicializar buff con un malloc.

«(…)Se arman paquetes… ¿eh?… tecnológicos… tecnológicos portes de… en donde están… este… interrelacionados con las otras capas.(…)»
23-01-2014 15:51
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Feer Sin conexión
Presidente del CEIT
win-win
**********

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 4.626
Agradecimientos dados: 604
Agradecimientos: 2.625 en 428 posts
Registro en: Apr 2010
Mensaje: #12
RE: [Duda] punto vs flecha
SNODE *buff = NULL; =P

[Imagen: digitalizartransparent.png]
23-01-2014 16:07
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Jarry Sin conexión
Anomalía de Belady
I know teh codez
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.970
Agradecimientos dados: 179
Agradecimientos: 202 en 85 posts
Registro en: May 2008
Mensaje: #13
RE: [Duda] punto vs flecha
para completar lo que dice Dios



//esto
a->b
//es exactamente igual que esto
(a*).b

//es pareccido a los arrays
a[1]
//es lo mismo que
(a+1)*



creo que eso esta explicado en el capitulo 7 del K & R

No estoy necesariamente de acuerdo con lo que dice en el post de arriba
[Imagen: 971aa6599664453c05cb3e42d58bbc0eo.jpg]
23-01-2014 16:43
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Jarry recibio 1 Gracias por este post
nanohueso (26-01-2014)
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.