C语言数据类型在程序中的使用?

先看一段代码

#include <stdio.h>
int main(void)
{
    float n1 = 3.0;
    double n2 = 3.0;
    long n3 = 2000000000;
    long n4 = 1234567890;
    printf("%.1e %.1e %.1e %.1e \n",n1,n2,n3,n4);
    printf("%ld %ld \n",n3 ,n4);
    printf("%ld %ld %ld %ld \n",n1,n2,n3,n4);
    return 0;
} 


下面是运行结果
图片说明
我知道的是%ld取4个字节double是8字节float在printf中转换为double
在第三行第一个%ld取得应该是n1的前4字节,第二个%ld取得是n1的后四个字节,以此类推,那这样的话第三行的输出结果应该不是0 0,且后两个值也不会被正确打印,而应该第三行的数据第一与第三个数为0第二与第四个数为n1与n2
的后四个字节,但是现在为什么能真确打印?求大神指教。

不是啊,你传入的是n1 n2 n3 n4,所以就是这四个变量,不存在因为第一个变量只读取了一半,第二个变量对应第一个变量后一半这种事情。
你传入的又不是数组。

如果是
float a[4] = { xxx, xxx, xxx, xxx, xxx, xxx, ... };
long * arr = (long *)&a[0];
rintf("%ld %ld %ld %ld \n", arr[0], arr[1], arr[2], arr[3]);
那才会出现你说的。

另外,问题解决,请采纳。

你传入的n1n2n3n4是变量,每个变量都有一个地址,如第四个%ld取值的时候会在n4变量地址开始取值。