刚看到一个帖子,是这么提问的:
“我知道这个是ld的错误。我就是想知道 为什么 得0 ?谢谢。。。
#include <stdio.h>
void main(){
double a=2.0;
int k=1;
while(k <=2)
{
a=a*2.0;
k++;
}
printf("%d:%ld\n",k,a);
}
谢谢”
其中有两位网友是这么回帖的:
由于a在内存中是这样的:00 00 00 00 00 00 20 40;而%ld是整形,所以只取前四个字节00 00 00 00,所以就是0了
printf参数的问题。printf第一个参数char*型的,表明后面参数的个数和类型。参数入栈的时候是根据前面的信息分配栈单元。ld分配了一个栈单元(32位),但是你入栈的是double型,却要2个栈单元,在打印输出的时候,又是只抛出32位。就像6楼说的,那个栈单元是0。
我个人觉得他们说的很有道理。
但按理说,a的值是8.0。在内存中为什么是00 00 00 00 00 00 20 40。我没有学过编译原理,不知道8.0为什么存储到内存中变为00 00 00 00 00 00 20 40,这其中是怎么转换的。希望知道的网友指点一下。谢谢。