常量区进阶(34)

++
1
2
3
4
5
6
7
8
9
10
char *strA()
{
char str[]="hello world";
return str;
}
char *strA()
{
char *str="hello world";
return str;
}

首先,指针只有四个字节,无法保持数据,所以定义后会在常量区开辟空间赋值。
所以return str返回的是常量区空间(在程序结束后才会被释放)

这也解释了第一个为什么返回乱码了。

然后继续再来看这一句:++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int* strr()
{
int a = 3;
int *d = &a;
return d;
}
int main(int argc, char* argv[])
{
int* d = strr();
cout << *d << endl;
int* q1 = new int(1);
int* q2 = new int(2);
int* q3 = new int(3);
int* q4 = new int(4);
cout << *d;
system("pause");
return 0;
}
// //