指针在c++ /静态作用域
Pointer in C++ / Static Scope
我有这样的代码:
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
指向同一作用域内的对象,当函数退出时,s
和r
都被销毁。在r
被销毁之前安全地解除对s
的引用。
void main()
也是不正确的
相关文章:
- 不同作用域中的静态变量和全局变量
- 如何在C++中嵌套词法作用域可访问的作用域中声明静态信息?
- 今天的主流编程语言主要使用动态还是静态(词汇)作用域?
- 在没有显式作用域的情况下无法访问模板基类的静态成员
- 类的静态成员变量(受保护)的作用域
- 函数作用域是静态变量还是线程本地变量在C++11中的第一个条目中初始化
- 使用作用域内生成的指针初始化静态成员
- C++静态成员函数中静态变量的作用域
- 类作用域常量:常量与静态常量
- C静态关键字与C++私有作用域
- 如何在 c++ 中创建一个可调试的文件作用域(静态?)类
- 模板类中静态函数或指针的作用域解析
- 文件作用域中的静态变量
- 函数作用域的静态非 Pod 对象初始化
- 使用作用域运算符访问非静态成员变量
- 线程静态类方法与全局作用域
- 是块作用域静态或线程存储持续时间变量初始化失败的原因
- 为什么文件作用域静态变量必须初始化为零
- 指针在c++ /静态作用域
- 如何在实例和静态作用域之间创建成员变量