int* f(int* x)
{
(*x)++;
return x; //安全的,x在域外
}
int& g(int& y)
{
y++; // 与函数f的效果一样
return y;//安全的,y在域外
}
int& h()
{
//int q;
//return q;
static int six;
return six; //安全,six在域外仍然有效
}
//char* 定义的指向常量区,基指向的内存不能更新。
//对于字符串常量分配在常量区,具有全局变量一样的生存期
//char[] 定义的在栈上,可以更新
//此时用字符串初始化局部数组,字符串并不分配内存,
//str数组分配在栈上,具有局部生存期,
char* j()
{
//
char str[20] = "Hello Baby!";//"Hello Baby!"开在栈上,栈中的变量是跟着函数走的
char *str1 = "Hi";//"Hi"开在常量区,这个指针变量str1“指向”的是
//一个字符串--实际是在静态区的一个常量字符数组
str[1] = '2'; //正确,不可更新
//str1[1] = '2'; //错误,可以更新
return str1;
}
int main()
{
int a = 0;
int* pi; //pi其实也是对a地址内的内容进行操作
pi = f(&a);//丑了一点,但是显式的
g(a); //干净,隐式
j();
}///:~
从《C++编程思想》上摘下来的,中间还搜了点网上的资料