关闭

C++错题(8-30)

80人阅读 评论(0) 收藏 举报
分类:

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

输出:




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:103974次
    • 积分:3553
    • 等级:
    • 排名:第9615名
    • 原创:212篇
    • 转载:64篇
    • 译文:44篇
    • 评论:27条
    文章分类
    最新评论