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;
}
输出: