C/Visual C - Cast en C

 
Vista:

Cast en C

Publicado por Jorge (1 intervención) el 06/06/2011 23:34:08
Porque al compilar el siguiente código, arroja el error
"line 14.13: 1506-017 (S) Operand of address operator must be an lvalue or function designator."

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(){
char str_num[10];
double dbl_num, *ptr_dbl, *ptr_dbl2;

memset(str_num,0,sizeof(str_num));
strncpy(str_num,"2345.6",6);
str_num[6]='\0';
dbl_num=atof(str_num);
ptr_dbl=&dbl_num;
ptr_dbl2=&atof(str_num);
printf("STR_NUM:[%s]\n",str_num);
printf("DBL_NUM:[%f]\n",dbl_num);
printf("PTR_DBL:[%f]\n",*ptr_dbl);
printf("PTR_DBL:[%f]\n",*ptr_dbl2);
}

No debiera ser lo mismo:
dbl_num=atof(str_num);
ptr_dbl=&dbl_num;

Que:
ptr_dbl2=&atof(str_num);

Como se puede solucionar para que sea una sola linea sin tener que pasar por uan variable temporal.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Cast en C

Publicado por Capitan Kirk (97 intervenciones) el 07/06/2011 10:20:24
El operador de dirección te permite obtener la dirección de una variable (sea del tipo que sea) ó de una función (la dirección donde está el punto de entrada a la función, de hecho el simple nombre de la función, sin parámetros ni paréntesis ni nada es un puntero a esa función). Lo que no puedes es obtener la dirección de algo que devuelva una función, como en este caso.

El término "lvalue" significa "algo que puede estar a la izquierda de una asignación", es decir, una variable.

La segunda parte te indica que puedes también obtener un puntero a función. Por ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
 
void MiFuncion(void);
 
int main ()
{
	void	*p1, *p2;
 
	p1 = MiFuncion;
	p2 = &MiFunion;
	printf("Puntero 1: %p   Puntero 2: %p\n", p1, p2);
	return 0;
}
 
void MiFuncion(void)
{
	/* Esta funcion esta vacia */
}


Si ejecutas este programilla, comprobarás que MiFuncion y &MiFuncion son lo mismo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar