C ++ / Static Sc​​ope中的指针

时间:2015-09-04 17:12:02

标签: c++ pointers

我有这段代码:

int foo() {
    int r = 100;
    int *s = &r;
    return *s;
}

void main() {
    cout << foo();
    system("pause");
}

我认为结果应该是垃圾值,而不是100。

但是当我在Windows 8.1和Mac OS X中测试它时,结果是100。

有人可以向我解释一下吗?

2 个答案:

答案 0 :(得分:2)

不,不应该有“垃圾价值”。 s指向同一范围内的对象,当函数退出时,sr都会被销毁。在s被销毁之前,您可以安全取消引用r

void main()也不正确。

答案 1 :(得分:2)

那是因为* s只是指针指向的值。

如果你有:

scope path: ":account_id", as: "account" do
  resources :projects
end

它会打印出来:

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 时它只是将c的值复制到a中,但c和a之间没有建立进一步的关系,这意味着你可以改变c或它指向你想要的任何值,以及a会继续持有你执行该任务时所拥有的那个值。它们在内存中有两个不同的空间,a = *c;所做的只是复制c指向的值

我的意思是,当你返回a = *c时,你没有将地址返回到内存*s指向的地址,但是它包含的值