C++基础-- sizeof使用时候的坑
sizeof的trick
sizeof运算时的问题
sizeof得到的无符号数,也就是说,任何与它进行运算的数字都为正数,这玩意不能用于判断语句。
#include <iostream>
#include <typeinfo>
using namespace std;
int main(){
//判断为真
if(sizeof(int)-5>=0)
printf("无符号数和有符号数做运算时,结果为无符号数\n");
//第一个输出以原本类型,也就是无符号类型输出,结果为18446744073709551615
cout<<sizeof(int)-5<<endl;
//以无符号十六进制输出,其实就是FFFFFFFF 反码也就是-1
printf("以16进制无符号输出%X\n",sizeof(int)-5);
//第一个输出以有符号类型,结果为 -1
cout<<(signed)(sizeof(int)-5)<<endl;
}
sizeof计算数组时的陷阱
要注意数组在函数间传递的时候,传递的是指针,已经不是变量名了。
#include <iostream>
#include <typeinfo>
using namespace std;
void calArray(int a[]);
int main(){
int a[] = {1,2,3};
//答案为12 因为此时a还是变量名
cout << "传入数组名" <<sizeof a<<endl;
calArray(a);
}
void calArray(int a[]){
//答案为8 因为我是64位机,指针的长度为机器字长8个字节
cout<<"传入数组指针" << sizeof a;
}