为什么我的结果与本教程的结果不一样,即使是复制/粘贴?

问题描述 投票:0回答:1

我正在从this website学习C。但是,当我达到this tutorial时,我似乎得到了奇怪的结果。该站点建议尝试在不首先查看示例的情况下编写代码,因此我尝试输入此代码。

#include <stdio.h>
int main()
{
    printf("The \"long\" keyword is pretty useful!\n");

    int a=5;
    long int la=5;
    long long int lla=5;
    double b=5;
    long double lb=5;
    printf("%d (as a normal int) is %d bytes big!\n", a, sizeof(a));
    printf("%d (as a long int) is %d bytes big!\n",la, sizeof(la));
    printf("%d (as a long long int) is %d bytes big!\n",lla, sizeof(lla));
    printf("%lf (as a normal double) is %d bytes big!\n",b, sizeof(b));
    printf("%lf (as a long double) is %d bytes big!\n"),lb, sizeof(lb);
}

我得到这个回复

The "long" keyword is pretty useful!
5 (as a normal int) is 4 bytes big!
5 (as a long int) is 4 bytes big!
5 (as a long long int) is 0 bytes big!
5.000000 (as a normal double) is 8 bytes big!
5.000000 (as a long double) is 8 bytes big!

它没有任何意义,所以最终我看了看这个例子,发现它没有声明任何数字,只是声明了变量。当没有设置数字时,跳过我在调用变量时犯的一个错误,而是尝试这样做:

    int a;
    long int la;
    long long int lla;
    double b;
    long double lb;
    printf("A normal int is %d bytes big!\n", sizeof(a));
    printf("A long int is %d bytes big!\n", sizeof(la));
    printf("A long long int is %d bytes big!\n", sizeof(lla));
    printf("A normal double is %d bytes big!\n", sizeof(b));
    printf("A long double is %d bytes big!\n"), sizeof(lb);

我得到的结果:

The "long" keyword is pretty useful!
A normal int is 4 bytes big!
A long int is 4 bytes big!
A long long int is 8 bytes big!
A normal double is 8 bytes big!
A long double is 8 bytes big!

几乎是预期的结果,但出于某些未知原因,“ long int”的大小为4个字节,与通常声明的int大小相同。与“ long double”相同。

最终,我决定只复制/粘贴网站提供的示例,以确保我是否犯错,这是这样:

    #include <stdio.h>
    int main() {
        int a;
        long b;   // equivalent to long int b;
        long long c;  // equivalent to long long int c;
        double e;
        long double f;
        printf("Size of int = %ld bytes \n", sizeof(a));
        printf("Size of long int = %ld bytes\n", sizeof(b));
        printf("Size of long long int = %ld bytes\n", sizeof(c));
        printf("Size of double = %ld bytes\n", sizeof(e));
        printf("Size of long double = %ld bytes\n", sizeof(f));

        return 0;
    }

并且网站说该示例应该返回

Size of int = 4 bytes 
Size of long int = 8 bytes
Size of long long int = 8 bytes
Size of double = 8 bytes
Size of long double = 16 bytes

但是对我来说,它返回:

Size of int = 4 bytes
Size of long int = 4 bytes
Size of long long int = 8 bytes
Size of double = 8 bytes
Size of long double = 12 bytes

这是我似乎找不到答案的唯一原因,为什么它没有返回与网站所说的相同。

我不知道为什么这样做,也不知道为什么我的第一次尝试似乎没有正确返回“ sizeof”部分(特别是第三行,该返回的long long int为0字节大。)有人知道吗? ?

c long-integer sizeof stdio
1个回答
1
投票

问题是您使用了错误的格式来打印long intlong long int%d仅适用于int,不适用于较长的变体。

因为您使用的格式不正确,所以您得到不确定的行为。它没有正确打印long long int的大小,因为它错误地提取了参数,这就是为什么在那里显示0的原因。

    printf("%d (as a normal int) is %d bytes big!\n", a, sizeof(a));
    printf("%ld (as a long int) is %d bytes big!\n",la, sizeof(la));
    printf("%lld (as a long long int) is %d bytes big!\n",lla, sizeof(lla));

请参见How to printf long long

您还应该为%zu值使用size_t,但实际上通常与%d一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.