小怪兽@ 发表于 2023-3-22 20:25:19

函数参数的执行顺序

#include<stdio.h>
int fun(int a, int b, int c){
   return 0;
}
int main(){
return fun(printf("a"),printf("b"),printf("c"));
}

请问最后的输出结果和原因是什么

isdkz 发表于 2023-3-22 20:29:29

首先,这个程序包含了stdio.h头文件,它用于实现标准输入/输出功能。然后,程序定义了一个名为fun的函数,接受三个整型参数a、b和c,但函数仅返回0。在main函数中,程序调用了fun函数,参数是三个printf函数调用,分别输出字符 "a"、"b"和 "c"。

请注意,程序中有一个小错误,return 0;这一行的分号应该是英文分号,而不是中文分号。我将在下面的解释中假设这个错误已经被更正。

现在我们来看输出结果。C语言中,函数参数的求值顺序是未指定的,因此printf("a")、printf("b")和printf("c")三者之间的执行顺序是不确定的。但是,无论执行顺序如何,它们都会被依次执行。每个printf函数调用都会输出相应的字符,并返回写入的字符数。

在这个例子中,每个printf函数调用都会输出一个字符并返回1,因为它们各自只输出了一个字符。因此,fun函数的实际参数值将是三个1。然后,fun函数仅返回0,所以main函数也返回0。但是,我们关心的是输出结果,而不是main函数的返回值。

总之,这个程序的输出结果将是 "a"、"b"和 "c" 三个字符,但它们的顺序是不确定的,因为函数参数求值顺序在C语言中是未指定的。

歌者文明清理员 发表于 2023-3-22 20:30:35

该程序有一个函数fun和一个main函数,其中fun函数的参数是三个整数,返回值是一个整数0。main函数中调用了fun函数,并将三个printf函数的返回值依次传入fun函数中。由于printf函数会返回输出的字符数,因此fun函数的参数实际上是三个整数,分别是输出字符'a'、输出字符'b'、输出字符'c'的字符数。最终main函数的返回值就是fun函数的返回值0。因此程序输出0。

歌者文明清理员 发表于 2023-3-22 20:31:03

@一点沙 白嫖

liuhongrun2022 发表于 2023-3-22 20:49:52

不会,顶帖

sfqxx 发表于 2023-3-22 21:20:08

歌者文明清理员 发表于 2023-3-22 20:30
该程序有一个函数fun和一个main函数,其中fun函数的参数是三个整数,返回值是一个整数0。main函数中调用了f ...

wc{:10_266:}

sfqxx 发表于 2023-3-22 21:20:49

歌者文明清理员 发表于 2023-3-22 20:31
@一点沙 白嫖

都结束了白嫖个等

歌者文明清理员 发表于 2023-3-22 21:23:30

sfqxx 发表于 2023-3-22 21:20
wc

ch*tg*t
页: [1]
查看完整版本: 函数参数的执行顺序