
正文
c语言函数的嵌套调用与栈 c语言嵌套调用和嵌套定义
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
C语言中,函数调用是通过栈实现的,怎样理解这句话?
因为函数调用的时候,就要将关键的寄存器的值存入堆栈中,等到执行完之后又从堆栈中取出数据
,计算机底层,有cs和ip的指令指针,指向哪里就执行哪里的指令,但是函数调用会人为的把cs和ip改变, 从而改变了指令执行的位置,自然去执行调用的函数了,但是此时,还是要将关键的寄存器存入堆栈,比如cs,等到调用玩之后,就又从堆栈中取出关键的寄存器的值,cs,ip还有别的一些
尤其是递归函数
相关问答
Q1: C语言函数调用(栈的实现)
Status StackTraverse(SqStack S, Status (*pFun)(ElemType))
{
while(S.bottom != S.top)
{
pFun(*--S.top);
}
return OK;
}
//visit函数
Status Visit(ElemType e)
{
printf("%d\n", e);
return OK;
}
//调用
StackTraverse(S, Visit);
Q2: c语言中函数能嵌套定义吗?
在c中可以嵌套调用函数,但不可以嵌套定义函数。
函数嵌套调用是允许的。
int
a()
{
b();//调用函数b
}
函数嵌套定义是错误的。
int
a()
{
int
b()
//在函数a中定义函数b
{
……
……
}
Q3: C语言函数嵌套
#include stdio.h
void b()
{
printf("Hello World!\n");
}
void a()
{
b();
}
void main ()
{
a();
}
这样就OK了,只要遵循一个原则,函数在被调用前必须是已经声明过的。因为编译器是要先知道有这个东西存在(已经被定义或声明过),才能通过编译。
如果函数b在函数a之前定义(如上),则不需要在函数a里定义,直接调用即可;
如果函数b在函数a之后定义(如下),则应在在a中声明函数b之后才能调用。
void a()
{
void b();
b();
}
void b()
{
printf("Hello World!\n");
}
Q4: c语言:函数调用时,栈的问题——(有请高手高手高高手)
必须出栈!
aa 和 bb 和c 都是函数内部的局部变量,函数返回后就被释放,也就是在栈中没有了,返回后就剩下图中main()函数所对应的栈结构.
栈只能够通过出栈来减少栈中数据的个数,从反面来讲,如果不出栈,funcA()函数返回后,栈指针还是指向c那,这肯定是不对的,因为函数返回后栈指针就得指向man()的栈结构了。
Q5: C语言是怎么进行函数调用的?
每一个函数调用都会分配函数栈c语言函数的嵌套调用与栈,在栈内进行函数执行过程。调用前c语言函数的嵌套调用与栈,先把返回地址压栈c语言函数的嵌套调用与栈,然后把当前函数c语言函数的嵌套调用与栈的esp指针压栈。
关于c语言函数的嵌套调用与栈和c语言嵌套调用和嵌套定义的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






