1.首先我们来探究一下指针的值这个问题,请看下面程序:
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char* argv[])
{
int a = 100;
int b = -1;
float c = 3.14;
int *d = &a;
float *e = &c;
printf("d = %d,e = %f",d,e);.
return 0;
}
这是我们用十进制输出的,请看结果:
显然,d和e的值并不是a和c的值,那么它究竟是什么呢,我们以十六进制输出:
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char* argv[])
{
int a = 100;
int b = -1;
float c = 3.14;
int *d = &a;
float *e = &c;
printf("d = %x,e = %x",d,e);.
return 0;
}
看结果:
显然,这是地址。那么为什么采用不同的输出方式,差别会这么大呢?用c缺陷和指针中的guan观点来讲就是,一个值的类型并不是固有的方式,我们对其的探究不能ting停留在类型上,而在于正确使用这个值。这个值如何显示取决于编译器,事实上,它还可以用机器码解释,用字节解释,结果都不一样。
最后,我们对d和e取地址,看看结果:
结果一样,这证明了实质上,d和e里面就是a和c的地址。