JILAU_WHO_AM_I_Q234
JILAU_WHO_AM_I_Q234
2019-06-13 18:17
采纳率: 84.6%
浏览 391

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
的后四个字节,但是现在为什么能真确打印?求大神指教。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • caozhy
    已采纳
    不是啊,你传入的是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]);
    那才会出现你说的。
    
    另外,问题解决,请采纳。
    
    点赞 评论
  • qq_35731693
    余浩(演绎丶) 2019-06-15 09:15

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

    点赞 评论