Has anyone noticed that if we changed *ftPtr = feet and *inPtr = inches to ftPtr = &feet and inPtr = &inches respectively, ftPtr local variable still refers to 9 feet and inPtr refers to 10.12 inches. But the output is 0 feet and 0 inches?
Does anyone have an explanation why?
#include <stdio.h>
#include <math.h>
void metersToFeetAndInches(double meters, unsigned int *ftPtr, double *inPtr){
double rawFeet = meters * 3.281;
unsigned int feet = (unsigned int)floor(rawFeet);
if (ftPtr) {
*ftPtr = feet;
printf("ftPtr refers to %d\n", *ftPtr);
}
double fractionalFoot = rawFeet - *ftPtr;
double inches = fractionalFoot * 12.0;
if (inPtr) {
*inPtr = inches;
printf("inPtr refers to %.2f\n", *inPtr);
}
}
int main(int argc, const char * argv[]) {
double meters = 3.0;
unsigned int feet;
double inches;
metersToFeetAndInches(meters, &feet, &inches);
printf("feet: %d\ninches: %.2f\n", feet, inches);
return 0;
}
The output:
ftPtr refers to 9
inPtr refers to 10.12
feet: 9
inches: 10.12
Program ended with exit code: 0
#include <stdio.h>
#include <math.h>
void metersToFeetAndInches(double meters, unsigned int *ftPtr, double *inPtr){
double rawFeet = meters * 3.281;
unsigned int feet = (unsigned int)floor(rawFeet);
if (ftPtr) {
ftPtr = &feet;
printf("ftPtr refers to %d\n", *ftPtr);
}
double fractionalFoot = rawFeet - *ftPtr;
double inches = fractionalFoot * 12.0;
if (inPtr) {
inPtr = &inches;
printf("inPtr refers to %.2f\n", *inPtr);
}
}
int main(int argc, const char * argv[]) {
double meters = 3.0;
unsigned int feet;
double inches;
metersToFeetAndInches(meters, &feet, &inches);
printf("feet: %d\ninches: %.2f\n", feet, inches);
return 0;
}
The output:
ftPtr refers to 9
inPtr refers to 10.12
feet: 0
inches: 0.00
Program ended with exit code: 0