c – 在定义它的函数外部操作本地静态指针变量
发布时间:2020-12-16 09:56:06 所属栏目:百科 来源:网络整理
导读:我想访问并修改全局范围内函数中定义的静态变量,但输出的第2行和第3行是意外的,为什么ox为0? #include iostreamusing namespace std;int * foo(){ static int *x = new int(5); cout *x 't' x endl; *x++; return x;}int main(){ int * ox; ox = foo(); co
我想访问并修改全局范围内函数中定义的静态变量,但输出的第2行和第3行是意外的,为什么ox为0?
#include <iostream> using namespace std; int * foo(){ static int *x = new int(5); cout << *x << 't' << &x << endl; *x++; return x; } int main(){ int * ox; ox = foo(); cout << *ox << 't' << &ox << endl; *ox++; cout << *ox << 't' << &ox << endl; int * t= foo(); } 输出是(在我的机器上): 5 0x6021d0 0 0x7fffdc82d3a0 0 0x7fffdc82d3a0 0 0x6021d0 欢迎任何评论. 解决方法
你遇到了一些解析问题.让我们逐行查看代码:
static int * x = new int(5); 第一次控制流经过该行时,x被赋予一个指向新分配的int的指针,该int用值5初始化.每个后续时间控制流经过,该行将被“跳过”.到目前为止没有惊喜. cout << *x << 't' << &x << endl; 我怀疑你打算打印值的地址,而不是指针,因此输入 cout << *x << 't' << x << endl; 现在变得有趣了.这条线可能不会像你想象的那样做. *x++; 编译器将其解析为*(x).发生的事情是指针x被提前并且其先前的值被解除引用并且该结果被丢弃. (在下次输入函数时调用未定义的行为,因为现在x指向一个超过分配的内存位置.)您可能假设它被解析为(* x),它会增加x指向的值. 相同的模式适用于您的主要. 如果我用GCC编译你的原始代码并传递-Wall标志(这总是一个好主意),它给了我们一个很好的暗示: main.cpp: In function ‘int* foo()’: main.cpp:8:7: warning: value computed is not used [-Wunused-value] *x++; ^ main.cpp: In function ‘int main()’: main.cpp:16:8: warning: value computed is not used [-Wunused-value] *ox++; ^ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Cocos2d-x 详解坐标系统
- WebGIS--ArcGIS for Flex系列开发一:flash builder
- flex – 如何在Flash中处理从右到左的语言(10版之前)?
- Project Perfect让Swift在服务器端跑起来-让Perfect更Rail
- arcgis api for flex 开发入门(七)Geometry service 的使
- 我是否需要为MPI :: Isend提供相应的MPI :: Irecv?
- 关于mmu,bootloader,dta以及各种乱七八糟
- POSIX正则表达式 验证电子邮件地址
- ruby-on-rails – 使用heroku db:push的水龙头问题
- sqlite:有没有办法在SELECT子句中创建条件OR / COALESCE?