【C语言】

本文深入探讨了C语言中的函数,包括函数的定义、调用、声明和参数。介绍了函数参数的值传递、地址传递,特别讲解了一级指针、数组及字符串的传参方式。还讨论了函数的返回值重要性,并提供了练习题,如自定义求和函数及使用命令行参数实现简易计算器。此外,提到了全局变量和局部变量的概念。
摘要由CSDN通过智能技术生成

函数

函数,就是将能实现某些功能的代码封装成代码块,当想使用这个功能的时候,只要通过代码块的名字就可以调用这个功能,无需再写重复的代码了。这个代码块就叫做函数,代码块的名字就是函数名。如 printf scanf strlen strcat atoi 等

函数的定义和调用

返回值类型  函数名(函数的参数列表){
   
    //函数体 -- 也就是实现功能的代码块
}
例:
#include <stdio.h>

//void 是函数的返回值类型  如果函数没有返回值 可以写成 void 但是不能不写
//my_function 是函数名 是一个标识符 要符合标识符命名规范
//()	里面是函数的参数列表 如果函数没有参数 
//		可以空着不写 或者写成void 但是注意括号必须写
//{}	里面的是函数体,也就是我们用来实现功能的代码块
//return 是用来返回函数执行的结果的 如果没有返回值 可以不写 或者写成 return;
//		如果有返回值  返回的类型要和 函数名前面的类型保持一致
void my_function(void){
   
	int i = 0;
	for(i = 0; i < 3; i++){
   
		printf("hello world\n");
	}
	return;
}

//一个程序是由一个main函数和若干个字函数构成的
void hqyj(){
   
	printf("hqyj\n");
	my_function();
}

int main(int argc, const char *argv[])
{
   
	printf("----start----\n");
	//函数的调用
	//函数一旦定义好之后 就可以被其他的函数调用了
	//调用函数的格式  函数名(参数)  如果没有参数  ()也必须写 且不能写 void
	//程序执行到调用函数的语句时 就会跳转到函数中执行 执行完函数后
	//回到调用处 继续向下执行
	my_function();

	//函数如果不被调用 是不会执行的
	hqyj();

	printf("----end----\n");
	
	return 0;
}

函数的声明

如果把所有的函数都定义在 main 函数的上面,在main函数中调用是没有问题的。
但是函数之间相互调用就可能出现不认识的情况,这时就需要用到函数的声明。

#include <stdio.h>

//函数的声明
void my_print();
void hqyj();

int main(int argc, const char *argv[])
{
   
    my_print();
    return 0;
}

void my_print(){
   
	printf("hello world\n");
	hqyj();
}

void hqyj(){
   
	printf("hqyj\n");
}

函数的参数

函数为什么要有参数?
在函数中实现功能的过程中,有些值,函数内部没有,
就需要调用者通过参数的方式给函数传递过去。

#include <stdio.h>

//void my_add(int x, int y);//也可以
void my_add(int, int);//有参数的函数声明 可以只写参数的个数和类型 不写参数名

void my_sub(const int x, const int y);//定义中形参有const 声明时也要有

int main(int argc, const char *argv[])
{
   
	//有参数的函数调用
	//函数的调用处的()里面的叫做函数的实际参数 --简称 实参
	my_add(10, 20);

	int a = 100;
	int b = 200;
	my_add(a, b);

	my_sub(b, a);

	return 0;
}

//在定义函数的时候 () 里面的叫做函数的形式参数 --简称形参
//在调用函数的时候,操作系统会给形参分配空间  然后用实参来初始化形参
//相当于 在调用函数的过程中 隐藏了这样的代码
//			int x = 10;
//			int y = 20;
//在函数中使用形参 就相当于 使用了实参的 值
//在函数中对形参的修改 并不会直接影响到实参 因为实参和形参不在同一块内存空间上
//形参的作用域和生命周期都是整个函数内部
//在函数调用结束的时候  操作系统会回收 形参占用的内存空间
void my_add(int x, int y){
   
	printf("%d\n", x+y);
}

//形参加const 的作用 是不允许在函数内部修改形参的值
//保护形参不被修改
//有些场景 加 const会更合理一些
void my_sub(const int x, const int y){
   
	printf("%d\n", x-y);
}

函数的返回值

函数为什么要有返回值?
有些场景,函数执行的结果,并不是说直接打印到终端就结束了。
因为后面的代码可能会用到函数的执行结果。
如 strlen 函数返回结果给调用者,调用者可以自己决定如果处理这个执行的结果。
如果需要用到函数的返回值就写 如果不需要用,也可以不写。

#include <stdio.h>

int my_add
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值