#include "iostream"
using namespace std;
int & f1(int x=0,int y)
{
return x*y;
}
int *f2(int a,int b=1)
{
int t=a*b;
return &t;
}
int main(int argc, char* argv[])
{
const r;
int &a,*p;
r=10;
a=r;
const char *pc1 = "dukang";
char *const pc2 = "dukang";
char const *pc3 = "dukang";
const char const*pc4 = "dukang";
pc1 ='t';
pc2[2] = 't';
pc3[2]='t';
pc4[2]='t';
cout<<f1(3)<<endl;
cout<<f2(2,3)<<endl;
return 0;
}
①int & f1(int x=0,int y),默认列表必须从右边开始,如果x是默认参数,y也必须是默认参数。
②int & f1(int x=0,int y),返回值是一个引用,但是函数中返回的是一个临时的变量。
③f2的返回值要求是一个指针,但是返回了一个局部变量的引用。
④const r; const型必须在定义的时候初期化。
⑤pc1 ='t';pc2[2] = 't';pc3[2]='t';pc4[2]='t'; 这些指针都指向了常量字符串,不能进行修改。
int *f2(int a,int b=1)
{
int t=a*b;
return &t;
}
这个函数返回一个int 类型指针,而这个指针是在函数内的局部变量上,该值保存在堆栈上,当函数执行完毕,堆栈也释放了,再返回指针数据,那数据就是非法的,其结果也是不可控的,非法指针。