人生的过程,不断学习、不断向前迈进的过程

sizeof()有趣的地方

今天在浏览网页时无意中看到这样一道题:

 #include
 int main()
 {
 int i;
 i = 10;
 printf("i : %d\n",i);
 printf("sizeof(i++) is: %d\n",sizeof(i++));
 printf("i : %d\n",i);
 return 0;
 }

 我一眼看到这题,认定就应该是输出10、4和11。

 编译后才知道我错了,是10、4和10。百思不得其解,为什么不是11呢?难道i++这时并没有运算?

 后来在网上找了好久,才知道sizeof在编译期完成,我们应该把sizeof(xxx)看成一个size_t的常量,其中xxx的运算应完全忽略,sizeof只关心xxx的数据类型而已。看下面:

 char i = 1;
int j = sizeof(i++);
int k = sizeof(i+0.1);
printf("%d %d %d", i, j, k); // 输出为 1 1 8,因为i++并不真正计算,sizeof只关心输入的数据类型,i+0.1被提升为double

 是否超出你以前对sizeof()的认识呢?呵呵

没有评论:

发表评论