带参数的函数(值传递)和有返回值的参数
1.
函数的参数:
语法:
void 函数名(类型形参名){
函数体;
}
函数的参数可以有多个,如果有多个的时候用,隔开
例:
void 函数名(类型形参名1,类型形参名2,………………){
函数体;
}
注意:1.函数如果有参数,那么你调用的时候必须给它传参数,而且要按照对应的顺序和个数去传
2.函数的形参就是函数括号里面定义的变量,就相当于在函数内部定义了这个变量的局部变量,所以不能在函数内再定义同名的变量
3.调用函数的时候,给形参传值,就相当于给形参进行赋值,所以如果是基本数据类型不匹配的时候会发生强制转换
#include <stdio.h>
/**
* 函数的参数,这个参数需要一个int类型的数字
*
*/
void isOuNumber(int num){//int num就是一个局部变量
if (num % 2 == 0) {
printf("%d是偶数\n",num);
}else{
printf("%d是奇数\n",num);
}
}
//写一个计算两个数之和的函数
void getSum(int num1,int num2){
printf("%d+%d=%d\n",num1,num2,num1+num2);
}
void test(char ch,int num2){
printf("%c %d\n",ch,num2);
}
int main(int argc, const char * argv[]) {
// isOuNumber();//因为你的函数是一个有参数的函数,那么不能直接调用
isOuNumber(21);
// getSum(10,20);
test('a',90.3);
return 0;
}
2.
有一个函数,可以帮我们计算两个数之和
我是想你帮我算好,让我直接可以拿到结果,而不是你帮我打印出来
那么,问题来了?怎么样拿到结果
就需要用到函数的返回值!
语法:
返回值类型 函数名(参数列表){
函数体;
return 返回值;
}
void意思:空,就代表不需要返回值
函数要有返回值,就在函数定义的时候就在返回值类型写上你要返回的类型
#include <stdlib.h>
int getSum(int num1,int num2){
int sum = num1 + num2;
// printf("%d\n",sum);
return sum;
}
int main(int argc, const char * argv[]) {
// int abcd = getSum(15,20);
//
// printf("abcd=%d\n",abcd);
// int sum2 = sum + 30;
// printf("%d\n",getSum(15, 20));
//系统提供的函数带的有返回值?
// int num = arc4random_uniform(10);
int res= getSum(39, 28);
printf("%d\n",res);
printf("%d\n", arc4random_uniform(10));
printf("程序结束了\n");
return 0;
}
带返回值的函数需要注意的地方:
1.如果函数有返回值,我可以接收,也可以不接收,不管接没接收函数都有执行
2.接收返回值的时候,需不需要用同类型的变量来接收函数的返回值类型
基本数据里面,可以不用同类型,但是会发生强制转换
推荐以后不管怎么样,用来接收返回值的变量一定要与函数的返回值类型一致
3.返回值类型确定了,那么能返回不同类型的数据吗?
基本数据类型中可以
也不推荐这么做
4.当函数需要返回值的时候,必须保证每条分支都有返回值,否则会报错
3.函数的声明:
编译器是从上往下依次编译,当编译到你的函数的时候,还没有你实现的函数,所以会报错
所以如果想要函数不报错,就需要声明函数
声明的意思:
告诉编译器,我有这个函数,你放心的编译就行了
声明的语法:
返回值类型 函数名(参数列表);
例:void test();
小技巧:
直接对着函数头复制,然后在后面删掉大括号,加上分号就完了
声明几个注意事项:
1.函数的声明可以写在任意位置,但是一定要写在调用这个函数之前
2.函数的声明可以写N个
3.声明函数的时候,形参名可以省略
4.如果函数的返回值是int,也可以不用声明(仅限Mac下),建议大家无论什么函数都先声明
4.注意点:
函数需要注意的地方:
1.函数内不允许定义新的函数
2.函数内可以声明其他函数
3.函数可以调用其他的函数
4.函数不允许重名
#include <stdio.h>
void test(){
printf("test\n");
void test2();
test2();
}
void test2(){
printf("test2\n");
}
int main(int argc, const char * argv[]) {
test();
return 0;
}