Mail Archives: djgpp/1996/07/21/20:28:56
Reply to message 0521777 from DCLAYTON AT DIRC on 07/21/96 5:39PM
>Could somebody please tell me the best way to change an integer number to a
>float, and vice versa?
Depends on what you need it for. Here's a sample program which
demonstrates some basic (and not so basic) concepts of typecasting:
#include <stdio.h>
#include <math.h> /* defines double sqrt( double n ); */
struct foo
{
char name[20];
long socsec;
char dummy;
};
int main( void )
{
int x = 10;
float y = 5.55;
struct foo bar;
char *bytes;
x = (int) y;
y = (float) x;
y = (float) sqrt( (double) x );
printf( " x = %d\n (float) x = %f\n (char) x = %c\n (long double *) x =
%p\n",
x, (float) x, (char) x, (long double *) x );
strcpy( bar.name, "John Adams" );
bar.socsec = 123456789;
bar.dummy = '\0';
bytes = (char *) &bar;
printf( "%s\n", bytes );
printf( "The social security number is %ld\n", ((struct foo *)
bytes)->socsec );
bytes = (char *) malloc( 16 * 1024 * 1024 * sizeof *bytes );
printf( "Address of allocated memory = %p\n", bytes );
return 0;
}
WARNING: Anything more complex than char-int-float typecasting
should be examined very carefully to make sure it won't damage
anything! For example, if I had not created a 'dummy' field in the
above example and set it to zero, the "printf( bytes );" line would
have done some very strange things. See if you can figure out why. :)
John
- Raw text -