C++错题(8-30)

1、template:一定要类型匹配

template<class T>
void f(T &i)
{
	cout<<1<<endl;;
}
template<>
void f(const int &i)
{
	cout<<2<<endl;
}
int main()
{
	int i=8;
	f(i);
	float j=3.14;
	f(j);
	const int k=1;
	f(k);
	system("pause");
	return 0;
}
输出:1 1 2  只有当参数类型是const int类型时,才会调用第二个f().

2、返回引用类型

int& func()
{
	static int x = 3;//静态局部变量,函数结束后不会释放,存在全局区
	cout<<"&x = 0x"<<hex<<&x<<endl;
	return x;
}

int& f()
{
	int y = 3;//局部变量
	cout<<"&y = 0x"<<hex<<&y<<endl;
	return y;
}
int main()
{
	func()=8;//通过外界赋值,改变x的值
	f()=9;
	cout<<func()<<endl;
	cout<<f()<<endl;//再次调用会重新给y分配空间
	system("pause");
	return 0;
}
输出显示:

3、地址问题

int main(void)
{
	int a[2][2] = {{0,1},{2,3}};
	int *b = &a[0][0];
	int *b1 = &a[1][0];
	printf("b = 0x%x\n",(int)b);
	printf("b1 = 0x%x\n",(int)b1);
	printf("b[0] = %d\t",b[0]); //b[0]->*(b+0)->0
	printf("b[1] = %d\n",b[1]); //b[1]->*(b+1)->1
	printf("b1[0] = %d\t",b1[0]); //b1[0]->*(b1+0)->2
	printf("b1[1] = %d\n",b1[1]); //b1[1]->*(b1+1)->3
	int **c = &b;
	int **c1 = &b1;
	printf("c[0][1] = %d\t",c[0][1]); //c[0][1]->*(*c+1)->*(b+1)->1
	printf("&b = 0x%x\n",(int)&b);
	//printf("c[1][1] = %d",c[1][1]); //c[1][1]->*(*(c+1)+1)->*(*(&b+1)+1)地址b的下一个地址
	printf("c1[0][1] = %d\t",c1[0][1]); //c1[0][1]->*(*c1+1)->*(b1+1)->b1[1]->3
	printf("&b1 = 0x%x\n",(int)&b1);
	//printf("c1[1][1] = %d",c1[1][1]); //c1[1][1]->*(*(c1+1)+1)->*(*(&b1+1)+1)->地址b1的下一个地址
	
	printf("&a[0][0] = 0x%x\n",(int)&a[0][0]);
	printf("&a[0][1] = 0x%x\n",(int)&a[0][1]);
	printf("&a[1][0] = 0x%x\n",(int)&a[1][0]);
	printf("&a[1][1] = 0x%x\n",(int)&a[1][1]);
	system("pause");
	return 0;
}

输出:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值