局部变量,局部变量的陷阱

我的想法是通过一个指针变量获得函数内部的一个字符的地址,从而将这个字符输出来,代码如下:
#include #include char* GetMemory(void) { char* p; char str = 'm'; p = &str; assert(p != NULL); printf("返回前地址 %x\n",p); return p; } int main(int argc, char *argv[]) { char *p; assert(p != NULL); p = GetMemory(); printf("返回后地址 %x\n",p); printf("返回后地址 %c ",*p); return 0; } 结果如下:
图片局部变量,局部变量的陷阱
输出的w是一个乱码,我一直想不通为什么会这样,因为从地址可以看出,返回前后两者的地址完全一样,那么我通过
指针对相同地址操作,为什么输出结果会有区别,那是因为函数执行完之后,0x22ff43这段内存的使用权并不在程序员手
中,所以出现了乱码!除非重新申请使用这段内存,否则对它的操作都会是暂时的,不确定的!
Tags:  变量陷阱 vb局部变量 线程局部变量 静态局部变量 局部变量

延伸阅读

最新评论

发表评论