为什么sizeof()返回4个字节而不是2个字节的短整数?

时间:2017-07-26 11:15:44

标签: c

使用sizeof()

打印变量的大小
#include <stdio.h>

main()
{
    int a = 10,b = 20; 
    short int c;
    short int d = sizeof(c = a+b);
    int e = sizeof(c*d); //e holds the value of 4 rather than 2
    double f = sizeof(e*f);
    printf("d:%d\ne:%d\nf:%lf\n",d,e,f);
}

为什么sizeof()返回int的大小而不是short int,这意味着是2个字节?

1 个答案:

答案 0 :(得分:2)

声明

c

不测量变量c = a+b的大小,而是测量从表达式a+b计算的值的大小。它是c的值int,但它也是整个表达式的值。

出现在算术表达式中的存储类型小于int的整数值将提升为unsigned int(或int)以进行计算。算术表达式结果的存储类型为short int。这不会影响您将其存储在sizeof()变量中的事实。因此sizeof(c*d)返回的值。

/** * * workaround HTTPS problems with file_get_contents * * @param $url * @return boolean|string */ function curl_get_contents($url) { $data = FALSE; if (filter_var($url, FILTER_VALIDATE_URL)) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); $data = curl_exec($ch); curl_close($ch); } return $data; } // then in the unit tests: public function test_curl_get_contents() { $this->assertFalse(curl_get_contents(NULL)); $this->assertFalse(curl_get_contents('foo')); $this->assertTrue(strlen(curl_get_contents('https://www.google.com')) > 0); } 也一样。