分类: 电脑/网络 >> 程序设计 >> 其他编程语言
问题描述:
fun(float x){float y;y=3x-4;return y;} 问函数值的类型是什么?书中是这样介绍的::return语句中的表达式就是返回值此表达式的类型必须与函数首部所说明的类型一致若类型不一致,则以函数值的类型为准由系统自动进行转换由于没有在首部定义函数的返回值类型,所以隐含定义为int类型了但return的返回值是float,我想转换后应该还是float吧,但不懂为什么答案是int,麻烦谁来讲解一下
解析:
通常函数的返回类型是根据定义确定的如果没有就使用默认的int类型
跟return了什么类型是没有关系的,如果return的类型跟函数返回类型不同,编译器会自动把return的类型转换成函数返回类型
当然要一致
不过,对于形参来说,只要类型一致就行,形参变量在定义时和声明时可以不一致,或者,在声明函数时,可以省略形参变量名,只写形参变量类型即可
比如你定义了
int max(int x,int y){return x>y x :y;
}
你的函数声明可以写成这三种形式的任意一种(一般来说使用第三种更简洁)
int max(int x,int y);
int max(int a,int b);
int max(int,int);
比如说你返回的数组是个局部变量,他的作用域只是在那个函数作用域内有效,调用函数结束后,这个局部变量就释放了,这种情况下不能返回,但是你可以在你传入进来的数组(或指针)参数上进行 *** 作,这时的 *** 作就是用指针的概念进行的,建议你仔细看看指针与数组这些方面,这是难点。其实上面说的基本上是C语言,在C++里面,建议用容器与迭代器进行 *** 作,容器相当于C的数组,迭代器相当于C的指针。
这就是规定,如果你现在自己做一个新语言的编译器,也可以规定构造函数必须加上void,或者一个特殊的返回值。
那么为什么构造函数没有返回值呢,主要是为了区分构造函数和其它方法。其实,你可以尝试在你的构造函数前加上void,你会发现编译可以通过,但是编译器把它认为是方法,而不是构造函数,当然也无法在new的时候自动调用。
下面有一个例子,你可以测试看看:
public class MyPrint {
public void MyPrint(){ //这是一个方法,如果去掉void就是构造函数
Systemoutprintln("method");
}
public test(){ //提示错误,方法声明错误,必须加上返回值
}
public static void main(String[] args){
MyPrint mp=new MyPrint(); //构造函数自动调用
mpMyPrint(); //方法必须显示调用
}
}
函数返回值类型由函数首部定义的类型决定。
函数返回值应与首部定义的类型一致,如若不一致,则自动将返回值强制转换为函数首部定义的类型。没有定义类型时默认为int型。也就是说你的函数是什么类型,返回值就是什么类型。
函数,数学术语。其定义通常分为传统定义和近代定义,函数的两个定义本质是相同的,只是叙述概念的出发点不同。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)