上午,面试华为的数字通信部门,面试官给我出了一道题,考察sizeof的使用,以及C语言中各个数据类型所占的字节。
然而,我对sizeof并不熟悉,本科C语言就没学好,面试结果可想而知。(老实讲,我是来面Java的…)
问题描述
求如下代码的输出结果:
1 |
|
输出:
1 | 8 6 |
结果分析
1.sizeof:用于判断变量或数据类型的字节大小。
2.在C语言中,char占1个字节;
3.在C语言中,使用双引号为char数组赋初值时,将自动在末尾补上结束符号\0;
换言之,char str[] = “abcde”等价于
1 | char str[6]; |
所以,sizeof(str)等于6。
4.在32位系统中,指针占4个字节;而在64位系统中,指针占8个字节。因此,sizeof(p)为8。
补充知识
| 长度 | 32位操作系统 | 64位操作系统 |
|---|---|---|
| 指针 | 4 | 8 |
| int | 4 | 4 |
| long | 4 | 8 |
| long long | 8 | 8 |
| float | 4 | 4 |
| double | 8 | 8 |
| char | 1 | 1 |