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; 
}
posted @ 2020-12-02 08:08  lsxkugou  阅读(89)  评论(0编辑  收藏  举报