函数函数函数

函数:
返回值 函数名(形式参数列表)
{
函数体;
return 返回值; // 返回值类型必须与return后面类型一致,无返回值用void
}

函数调用: 函数名(参数)
不可以调用主函数(main函数)

实参:实际参数,调用函数时使用的参数。 例如:MAX(a,b)
形参:形式参数,函数定义时在参数列表中的变量。 例如:int MAX(int a,int b)中a,b

建议函数名首字母大写,变量名首字母小写,宏名全部大写
i,j,k(循环),tmp,temp(临时变量),p,q(指针)

变量的作用域
作用域:变量的作用范围
全局变量:定义在所有函数之外的变量,定义之后都可以访问,数据共享,在函数中变量被改变,在其他函数中该变量也被改变。
局部变量:在函数或者代码块里面定义的变量,从定义开始到函数或者代码块结束。
例子: a是全局变量。
#include <stdio.h>
void fun();
int a = 5;
int main() {
a = 10;
printf(“%d\n”, a);
fun();
return 0;
}
void fun() {
printf(“%d”, a);
return 0;
}

函数传参

所有的传参,都是用赋值的方式。
当函数需要修改实参的时候,需要传入实参的地址。
1.函数中修改普通变量,要传入普通地址变量(一级指针),在函数中使用* 一级指针。
2.在函数中修改一级指针,需要传入一级指针的地址(二级指针),在函数中使用 星号+二级指针

*int modify(int a) {                   //此函数无法改变实参aa的值
	a = 100;
	return 0;
}
void modifypoint(int *a) {          //地址传递   a=FF。*a=*FF。     *FF等价于aa     //利用 *加形参,此时形参是地址??
	*a = 100;
}
int main() {
	int aa = 2;                    // int型的变量aa赋值为2,同时aa也有一个内存地址
	modify(aa);
	printf("%d",aa);
	printf("\n");
	modifypoint(&aa);             //&aa  将变量aa地址传入函数中,假设地址为FF。等价于modifypoint(FF)。*FF等价于aa
	printf("传地址改变参数后为 %d", aa);
	return 0;
}*

一些指针知识的补充,方便理解地址传递的知识点
取址运算符&用来取得其操作数的地址。如果操作数 x 的类型为 T,则表达式 &x 的类型是 T 类型指针(指向 T 的指针)。
取址运算符的操作数必须是在内存中可寻址到的地址。换句话说,该运算符只能用于函数或对象(例如左值),而不可以用于位字段,以及那些还未被存储类修饰符 register 声明的内容。
当需要初始化指针,以指向某些对象或函数时,需要获得这些对象或函数的地址:
float x, *ptr;
ptr = &x; // 合法:使得指针ptr指向x
ptr = &(x+1); // 错误: (x+1) 不是一个左值
相反地,**当已具有一个指针,并且希望获取它所引用的对象时 *,使用间接运算符 (indirection operator),有时候这会被称为解引用运算符(dereferencing operator)。它的操作数必须是指针类型。 如果 ptr 是指针,那么 *ptr 就是 ptr 所指向的对象或函数 //位于该地址的对象或函数 **。如果 ptr 是一个对象指针,那么 *ptr 就是一个左值,可以把它(即 *ptr)当作赋值运算符左边的操作数:
运算符 & 和 * 是互补的:如果 x 是一个表达式,用于指定一个对象或一个函数,那么表达式 *&x 就等于 x。相反地,在形如 &*ptr 的表达式中,这些运算符会互相抵消,表达式的类型与值等效于 ptr。然而,不管 ptr 是不是左值,&*ptr 都一定不会是左值。

函数返回值
函数返回值是函数调用以后的唯一遗留物,它是一个右值,可以参与加减乘除以及其他运算,只能放在运算符右边。
也可以无返回值(函数用来封装部分代码,产生效果)。

函数调用
调用方式:函数名(函数参数)
函数参数必须和函数定义时候参数类型一致。如果不一致,但可以转换不会报错。
嵌套调用
1.以另外一个函数的返回值当做参数嵌套。MAX(d,MAX(c,MAX(a,b)));
2.递归调用:调用某个函数的过程中又出现直接或者间接地调用该函数本身。

退出性条件
推导公式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值