C语言初阶(六)函数

一.函数原型

1.1 函数原型是什么?

函数头以;结尾,构成函数原型。

1.2 函数原型怎么用?

函数原型通常放在头文件里面或者调用它的函数的前面

1.3 函数原型有什么用?

提前告诉编译器使用的函数基本信息(名称、参数个数类型、返回类型)。

1.4 函数前置声明

  • 试一试
#include <stdio.h>
void func();// 函数前置声明
void main(){
    func();
}
void func(){
   printf("Hello World\n");
}

通常把main()放在代码最前面便于阅读,但是这样会导致编译时因为找不到main()内部调用函数而错误或警告。在main()前加上函数原型可以解决这类问题,称为函数前置声明。

二.指针与函数 

1.函数名 

函数名与数组名一样表示的是地址,不同的是函数名是执行函数代码的起始位置,数组是数组第一个元素的地址。 

直接使用函数名func和取函数地址&func获取的值是相同的。

2.函数指针 

函数指针是指向函数的指针变量,即本质是一个指针变量。

void (*pfunc)();//函数指针定义(优先级解引用)
pfunc = &func;// pfunc = func; 赋值
(*pfunc)();// pfunc(); 函数指针调用

 例:实现数组元素的和积差商的函数。

#include<stdio.h>

//打印函数: 
void print_array(int arr[],int n){
	int* p = arr;
	while(p<arr+n){
		printf("%d ",*p++);
	}
	printf("\n");
}

//加法函数:
int add_array(int arr[],int n){
	int* p = arr;
	int res = *p;
	while(++p<arr+n){
		res = res + *p++;
	}
	return res;
}

//减法函数:
int subtract_array(int arr[],int n){
	int* p = arr;
	int res = *p;
	while(++p<arr+n){
		res = res - *p++;
	}
	return res;
}

//乘法函数:
int multipy_array(int arr[],int n){
	int* p = arr;
	int res = *p;
	while(++p<arr+n){
		res = res * *p++;
	}
	return res;
}

//除法函数:
int divide_array(int arr[],int n){
	int* p = arr;
	int res = *p;
	while(++p<arr+n){
		res = res / *p++;
	}
	return res;
}

int add(int a,int b){
	return a+b;
}
int subtract(int a,int b){
	return a-b;
}
int multipy(int a,int b){
	return a*b;
}
int divide(int a,int b){
	return a/b;
}

//函数作参数 回调函数 
int operation(int arr[],int n,int (*pfunc)(int,int)){//返回值是int型
                                                     //两个参数是int型 
	int* p = arr;
	int res = *p;
	while(++p<arr+n){
		res = (*pfunc)(res,*p);
	}
	return res;
}

int main(){
	//终端输入: 
	int n;
	scanf("%d",&n);
	int arr[n];
	int* p = arr;
	while(p<arr+n){
		scanf("%d",p++);
	}
	
	print_array(arr,n);
	
/*	printf("%d\n",add_array(arr,n));
	printf("%d\n",subtract_array(arr,n));
	printf("%d\n",multipy_array(arr,n));
	printf("%d\n",divide_array(arr,n));  */
	//定义一个函数指针数组: 
	int (*pfunc[4])(int arr[],int n) = {add_array,subtract_array,multipy_array,divide_array};
	for(int i =0;i<4;++i){
		printf("%d\n",pfunc[i](arr,n)); 
	}
	
/*	printf("%d\n",operation(arr,n,add));
	printf("%d\n",operation(arr,n,subtract));
	printf("%d\n",operation(arr,n,multipy));
	printf("%d\n",operation(arr,n,divide));  */
	int (*opt[])(int,int) = {add,subtract,multipy,divide};
	for(int i =0;i<4;++i){
		printf("%d\n",operation(arr,n,opt[i])); 
	}
	
}

3.指针函数

指针函数是指带指针的函数,即本质是一个函数,函数返回类型是某一类型的指针。 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值