我有这样的代码:指针在C++ /静态范围
int foo() {
int r = 100;
int *s = &r;
return *s;
}
void main() {
cout << foo();
system("pause");
}
我想结果应该是垃圾值,而不是100
但是,当我在Windows 8.1和Mac OS X的测试,结果是100.
有人可以向我解释吗?
我有这样的代码:指针在C++ /静态范围
int foo() {
int r = 100;
int *s = &r;
return *s;
}
void main() {
cout << foo();
system("pause");
}
我想结果应该是垃圾值,而不是100
但是,当我在Windows 8.1和Mac OS X的测试,结果是100.
有人可以向我解释吗?
这是因为* s只是指针指向的值。
如果您有:
int a = 2;
int *b = &a;
printf("%d\n", *b);
a = 3;
printf("%d", *b);
它会打印:
2
3
但如果你有:
int a = 2;
int b = 3;
int *c = &b;
printf("%d\n", a);
a = *c;
printf("%d\n", a);
*c = 5;
printf("%d\n", a);
它会打印
2
3
3
而不是
2
3
5
,因为当你做a = *c;
只是复印时c成的价值,但建立C和A之间没有进一步的关系,这意味着你可以变动c,或者它指向的值什么你想要的,而且a会继续保持你做这个任务时的那个价值。他们在内存中有两个不同的空间,而a = *c
所做的仅仅是将c指向的值复制到
我的意思是当你返回*s
时,你不会将地址返回到内存s
指向,但它包含的值
@ user4581301谢谢:)固定 – dietbacon
请看一本书 –
对我来说,它应该返回100,看起来相当简单。为什么你认为它应该是垃圾? – dietbacon
因为当'return * s'时,它会返回'r'的内存,但是当'foo'完成时,'r'的内存将被删除。所以我认为结果应该是垃圾值 – Forrest