源代码为:

#include "stdio.h"
int main() {
	int a = 01000; /*8进制*/
	printf("%d\n",sizeof(a));
}

1, 虽然提示上面的错误,但能输出结果:4 ,说明int 是4个bytes,共32位;

2, 提示已经很明确,说你将一个64位 (8bytes)的无符号整型作为printf的第二个参数传入;

3, 查资料占位符%d在格式化输入输出中代表int(4bytes),%ld代表long int(>=4bytes), %lld代表long long int (8bytes);

4,问题出在sizeof上,它返回的是一个64位 (8bytes)的无符号整型,所以占位符应该是%lld

5,补充:sizeof不是函数,而是单目运算符,C/C++语言编译器在预编译阶段的时候就已经处理完了sizeof的问题,也就是说sizeof类似于宏定义,
sizeof 一般形式为:sizeof(object),也可以sizeof var_char,不过大部分programer习惯用sizeof(),其运算符的含义是:求出对象在计算机内存中所占用的字节数。

正确代码:

#include "stdio.h"
int main() {
	int a = 01000; /*8进制*/
	printf("%lld\n",sizeof(a));
}
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐