在有以下程序: int main() { int i=10,j=1; i=i+j++; printf("%d,%d,%dn",i++,++j,i); i

在有以下程序: int main() { int i=10,j=1; i=i+j++; printf("%d,%d,%dn",i++,++j,i); i,第1张

i=i+j++++的运算优先级大于+,但++在后,则i=i+j=11,j+1=2。Printf函数对参数的计算顺序是从右往左的,则i=11,j+1=3,i+1=12。即选A。但在不同编译器的计算结果不同,在Dev算出来的结果就是12,3,12,因为++在前所以先算。但如果是C语言考试的话,还是前一种计算方式吧!

因为n的值是func运行是栈上的变量a的地址。第一次取*n时候printf还没开始运行,虽然func栈已经回收了,但是那个地址的那个值8还在。但是printf第一次运行以后,栈又重新分配给新的函数了,a那个地方被一个新的和printf的新值覆盖,第二次打出来的值就是那个地方那时候的值了。于是两次不一样了。

含义如下:

(1)一个Windows应用程序的执行过程是:

*** 作系统调用C/C++运行期启动函数->启动函数做完所有初始化工作后->调用应用程序进入点函数(即我们的主函数) 。

(2)而主函数返回时->启动函数便调用C/C++运行期的exit函数。

(3)通常我们的主函数有这样一个整型返回值,其意义为:当主函数返回时,这个返回值就会传递给这个exit函数作为参数,exit函数先做完所有清理工作,然后调用 *** 作系统的ExitProcess函数并将返回值传递给它,这使得 *** 作系统能够撤销进程并设置退出代码。通常0表示正常返回,非零的其他值表示出现错误。

(4)我们的主函数可以定义为类似void main()这个样子,即无返回值,那么这个时候就不能用return语句把退出代码传递给父进程或 *** 作系统,此时 *** 作系统可以撤销进程但不会设置退出代码。当然在这种情况下,你还是有办法设置退出代码,那就是显式地调用exit(退出代码)。

可以解释为:输出函数在主函数里,是以浮点型数据输出的,这个返回值是在屏幕上显示的。而 int main() 主函数返回的值是0,即 return 0这个返回值不是显示在屏幕上的,而是函数的一部分,因为C都是函数组成的,即使是主体,它也是一个完整的函数。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11189826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存