能仔细描述一下问题吗?从你问题来看,就算 1 拿到标志位之后,1 已经执行过了,拿到也没用。而且反过来,一开始 1 执行的时候,还没执行 2,他也只能是一个默认值
威远网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联建站2013年至今到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站。
C语言函数参数入栈顺序从右到左是为了方便可变参数函数。
一、在函数调用时,函数参数的传递,在C语言中是通过栈数据结构实现的。
在调用函数时,先根据调用函数使用的参数,自右向左依次压入栈中,然后调用函数,在函数开始执行时,将参数再依次弹栈。根据栈数据结构先进后出的特点,在函数中弹栈的顺序就是从左向右的。
二、对于参数固定的函数,无论是从左向右还是从右向左,都没什么区别,最终都是所有参数全部传递。
三、对于可变参数,比如printf,会在第一个参数格式字符串中,指明后续有几个参数,各自是什么类型的。于是在函数中,参数格式字符串必须第一个弹栈,否则无法获取参数类型,也就无法获知后续参数占几个字节,导致无法正确获知参数。
四、理论上来说,如果从左向右压栈,可变参数标记格式字符串的参数放在最后,那么也是可以的。 不过最早设计C语言的人采用了这种方式,后续也就延续下来了。
对啊,因为b要运行是需要参数x的但是x正好是a的返回值,所以会先执行a把x的具体值求出来,再执行b来进行运算的.
其实是printf("等于");
先执行的,然后再执行的scanf("%d", c);
只不过scanf的时候并不是从屏幕上scanf的,而是从缓冲区scanf的
你的5其实在printf之前先进入了缓冲区,然后再printf等于,然后再从缓冲区scanf那个5
如果要想得到你那个效果的输入输出,可以试试下面的代码
#include stdio.h
void main()
{
int b, c, f;
char a;
scanf("%d %c", b, a);
printf("%d%c", b, a);
if (a == '-')
{
printf("等于");
scanf("%d", c);
f = b - c;
printf("%d %d", c, f);
}
}