#include<iostream>
void show()
{
std::cout<<"hello world";
}
int main()
{
std::cout<<show();
return 0;
}
和下面的函数有什么区别?为什么有这个区别?
#include<iostream>
int show()
{
std::cout<<"hello world";
return 111;
}
int main()
{
std::cout<<show();
return 0;
}
一个函数的函数名既是该函数的代表,也是一个变量。由于函数名变量通常用来把函数的处理结果数据带回给调用函数,即递归调用,所以一般把函数名变量称为返回值。
函数可以有返回值,也可以没有返回值。对于没有返回值的函数,功能只是完成一个操作,而不能返回运算的结果。对于没有返回值的函数,功能不仅是完成一个操作,还能返回运算的结果,功能更加强大。
例如:
void funcplus(int a,int b)如上所示:funcplus只完成了 a+b的运算,结果没有返回,所以我们得不到计算的结果。
funcplusRet,完成了a+b的运算,并且返回了结果,我们可以获得结果。
那个不能运行,如果这么改呢:
#include
int show()
{
std::cout<<"hello world";
return 111;
}
int main()
{
std::cout<<show();
return 0;
}
那std::cout<<show();显示的不仅仅只有show()运行之后的返回值,还有 "hello world",这是为什么?
先调用show(),显示"hello world"。然后show()运行完毕,回到main函数,显示函数show()返回的值,即111……
追问那程序应该是先判断被调用的函数是否有返回值,如果有,则显示过“hello world”,再显示“111”;如果没有返回值,则语法错误。是这样吗?
追答实际上是编译器在产生程序的二进制码时候先判断被调用的函数是否有返回值,如果没有返回值,则报告“语法错误”,可能还会停止编译;否则就把程序的二进制码写成先调用函数show(在函数内部的代码被编译成显示“hello world”的二进制码),然后根据show函数的返回值的类型,以一定的格式显示show函数的返回值
而在程序运行的时候只是照着编译好的二进制码做而已
那赋值变量和不赋值变量,对于调用来说,有什么区别呢?
追答对调用来说没区别。
只是没返回值的函数是不能赋值而已,有返回值的随你用不用