Aka*_*ash 1 c declaration function definition return-value
为什么这段代码返回 500 和一些垃圾值?为什么除法函数不起作用?
#include <stdio.h>
int divmul(int v1, int v2)
{
int div,mul;
div =v1/v2;
mul=v1*v2;
return div,mul;
}
main()
{
int val1=50, val2=10;
printf("%d %d\n", divmul(val1,val2));
}
Run Code Online (Sandbox Code Playgroud)
一个函数使用 return 语句只能返回一个对象。
在这个返回语句中
return div,mul;
Run Code Online (Sandbox Code Playgroud)
使用了带有逗号运算符的表达式。它的值是右操作数的值。所以实际上由于表达式div没有副作用,那么 return 语句等效于
return mul;
Run Code Online (Sandbox Code Playgroud)
来自 C 标准(6.5.17 逗号运算符)
2 逗号运算符的左操作数计算为空表达式;在它的求值和右操作数的求值之间有一个序列点。然后评估正确的操作数;结果有其类型和值。并且编译器会为 printf 调用发出错误,因为没有足够的参数。
要么将结构声明为返回类型,例如
struct Result
{
int div;
int mul;
};
struct Result divmul( int v1, int v2 )
{
struct Result result = { v1 / v2, v1 * v2 };
return result;
}
Run Code Online (Sandbox Code Playgroud)
然后在主要
int main( void )
{
int val1 = 50, val2 = 10;
struct Result result = divmul( val1, val2 );
printf( "%d %d\n", result.div, result.mul );
}
Run Code Online (Sandbox Code Playgroud)
或者从函数参数返回结果(所谓的输出参数)
void divmul( int *v1, int *v2 )
{
int div = *v1 / *v2;
int mul = *v1 * *v2;
*v1 = div;
*v2 = mul;
}
Run Code Online (Sandbox Code Playgroud)
并且在主要
int main( void )
{
int val1 = 50, val2 = 10;
divmul( &val1, &val2 );
printf( "%d %d\n", val1, val2 );
}
Run Code Online (Sandbox Code Playgroud)
请注意,根据 C 标准,没有参数的函数 main 应声明为
int main( void )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |