C/C++编程:c6328 :大小不匹配 :已将unsigned_64作为__Param_(2)传递,但需要使用int来调用printf

源代码为:

#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));
}

Guess you like

Origin blog.csdn.net/zhizhengguan/article/details/121748348