C语言 我的代码的输出方式和方式是 842


#include <stdio.h>
int main(){
printf("%dt",sizeof(6.5));
printf("%dt",sizeof(90000));
printf("%dt",sizeof('a'));
return 0;
}

当我编译代码时,输出将是:"842"。有人可以解释为什么我得到这个输出吗?

首先是代码中的语法错误

printf("%dt";sizeof('a')); 

将其更改为

printf("%zut",sizeof('a'));   //note the change in format specifier also
             ^
             |
            see here

然后,假设您的平台是 32 位的

  • sizeof(6.5) == sizeof(double) == 8
  • sizeof(90000) == sizeof(int) == 4
  • sizeof('a') == sizeof(int) == 4

澄清一下,a表示默认值为 97 的值 int . 因此,sizeof('a')应该给出值 4,而不是 2 或 1。


编辑:

另外,您将获得 8 4 2 的输出,如果,在 16 位架构中

  • sizeof(6.5) == sizeof(double) == 8
  • sizeof(90000) == sizeof(long) == 4
  • sizeof('a') == sizeof(int) == 2

如果您使用的是 32 位编译器

printf("%dt",sizeof(6.5));

6.5是双倍的,所以sizeof(double)8.

printf("%dt",sizeof(90000));

90000是一个整数(或长整型(,所以sizeof(int)给出4

printf("%dt";sizeof('a'));
             ^
             you left a semicolon here, change it to a comma

'a'转换为 int,因此sizeof(int)给出4 .

所以实际输出是

8     4      4

IDEone链接

但是,如果你使用的是 16 位编译器,你会得到

sizeof(6.5) = sizeof(double) = 8
sizeof(90000) = sizeof(long) = 4
sizeof('a') = sizeof(int) = 2

所以这可以解释你的输出。

最新更新