函数栈返回的问题,还需要高手给解释一下。
刚才看了一个帖子,名称:一份C/C++实习生笔试试卷(基础部分),大家讨论一下答案吧!
连接:http://topic.csdn.net/u/20090211/16/773219a4-bb84-4702-8669-28fef466af62.html
对于下面的程序,其中很多人认为函数返回后堆栈返回,所以printf(str)输出结果未知。实际的输出结果确实是乱码,但是我在printf(str)这一行设置了断点(VC环境),结果发现str的内容居然是Welcome to AMOI,既然栈已经返回,那么里面不应该有数据才对(或者说是数据未知才对),为什么数据是已经返回的栈中的变量内容呢?
char* GetMemory(void)
{
char p[] = "Welcome to AMOI";
return p;
}
void main(void)
{
char* str = NULL;
str = GetMemory();
printf(str);
}
运行main函数的结果如何?你觉得该段代码是否存在什么问题?
连接:http://topic.csdn.net/u/20090211/16/773219a4-bb84-4702-8669-28fef466af62.html
对于下面的程序,其中很多人认为函数返回后堆栈返回,所以printf(str)输出结果未知。实际的输出结果确实是乱码,但是我在printf(str)这一行设置了断点(VC环境),结果发现str的内容居然是Welcome to AMOI,既然栈已经返回,那么里面不应该有数据才对(或者说是数据未知才对),为什么数据是已经返回的栈中的变量内容呢?
char* GetMemory(void)
{
char p[] = "Welcome to AMOI";
return p;
}
void main(void)
{
char* str = NULL;
str = GetMemory();
printf(str);
}
运行main函数的结果如何?你觉得该段代码是否存在什么问题?
...全文
相关推荐
寒假12.顺序栈_栈_pop_
用C++实现栈的存储、pop、push等操作
C语言函数调用栈(一)
程序的执行过程可看作连续的函数调用。当一个函数执行完毕时,程序要回到调用指令的下一条指令(紧接call指令)处继续执行。函数调用过程通常使用堆栈实现,每个用户态进程对应一个调用栈结构(callstack)。编译器使用堆栈传递函数参数、保存返回地址、临时保存寄存器原有值(即函数调用的上下文)以备恢复以及存储本地局部变量。不同处理器和编译器的堆栈布局、函数调用方法都可能不同,但堆栈的基本概念是一样的。寄存器是处理器加工数据或运行程序的重要载体,用于存放程序执行中用到的数据和指令。因此函数调用栈的实现与处理器寄存器组密切相关。Intel32位体系结构(简称IA32)处理器包含8个四字节寄存器,如下图
浅谈C语言函数调用参数压栈的相关问题
下面小编就为大家带来一篇浅谈C语言函数调用参数压栈的相关问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
顺序栈,压栈、弹栈、获得栈顶元素、统计栈中元素个数、打印栈中元素
顺序栈,利用一组地址连续的存数单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置,压栈、弹栈、获得栈顶元素、统计栈中元素个数、打印栈中元素
Shell中函数返回值超出问题
主要介绍了Shell中函数返回值超出问题,shell中通过return返回是有限制的,最大返回255,超过255,则从0开始计算,需要的朋友可以参考下


