Re: floats?
"Robby" <Robby@discussions.microsoft.com> wrote in message
news:2826911A-8FA6-449D-B287-0531722E4C77@microsoft.com
Hello,
For the first time I find myself actually needing to manipulate
floats as opposed to just reading about them! And so, again, I am in
need of basic C advice, for my attempts of finding a solution have
failed me !!!
Here's what I know, In C, floats are 32 bits right!
I am having difficulty assigning a float value to a float array?
I am declaring a global float array, and then I must pass it down a
few functions, so I supplied a simplified program doing just that.
Here is the code:
////////////////////////////////////////////////////////////////////////////
float f_ExtIn[4] = {2.1,4.2,6.3,8.4};
The 4 is unnecessary and only creates an opportunity for error.
void IO_Interface( float f_ExtIn[]);
void IOSS ( float *f_ExtIn );
void CPUA_I2CTEMP (float *f_ExtIn);
Giving function arguments and global variables the same name is at best
confusing and should be avoided.
void main()
Should be int main()
{
IO_Interface( f_ExtIn );
}
void IO_Interface( float f_ExtIn[] )
{
IOSS( f_ExtIn );
}
void IOSS(float *f_ExtIn)
{
CPUA_I2CTEMP(f_ExtIn);
}
void CPUA_I2CTEMP(float *f_ExtIn)
{
float reading;
reading = read_full_temp(); //Returns room temperature as,
ex:76784565 reading /= 100.0; //Moves over the
decimal point to get
76.78 Deg F.
//reading, is now a float!
f_ExtIn[0] = reading; //Assign to float array. OKAY it
works!
//*(f_ExtIn+4)= reading; //Attempting to write to the second
element, but //f_ExtIn[4] = reading; //these don't work!
Incrementing a pointer by 1 advances the pointer by sizeof whatever is
pointed to. To go from f_ExtIn[0] to f_ExtIn[1] you should add 1, since this
advances the pointer by sizeof(float), which is 4 bytes.
*(f_ExtIn+1)= reading;
More generally, to assign to f_ExtIn[n], you use
*(f_ExtIn+n)= reading;
--
John Carson