使用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个字节?
答案 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);
}
也一样。