指针在c++ /静态作用域

Pointer in C++ / Static Scope

本文关键字:静态 作用域 c++ 指针      更新时间:2023-10-16

我有这样的代码:

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("%dn", *b);
a = 3;
printf("%d", *b);

它会打印:

2
3

但是如果你有:

int a = 2;
int b = 3;
int *c = &b;
printf("%dn", a);
a = *c;
printf("%dn", a);
*c = 5;
printf("%dn", a);

它会输出

2
3
3

而非

2
3
5

因为当你执行a = *c;时,它只是将c的值复制到a中,但没有在c和a之间建立进一步的关系,这意味着你可以改变c或者它指向的任何你想要的值,而a将继续保持c在你执行赋值时的值。它们在内存中是两个不同的空间a = *c所做的只是将c指向的值复制到

我的意思是,当您返回*s时,您不是返回s指向的内存地址,而是返回它包含

的值。

不,不应该有"垃圾值"。s指向同一作用域内的对象,当函数退出时,sr都被销毁。在r被销毁之前安全地解除对s的引用。

void main()也是不正确的