C语言函数

什么是函数
  • 函数也叫子程序,是一个大型程序中的某部分代码,有一个或者多个语句块组成,它负责完成某项特定的任务,相较于其他代码具有相对独立性。
  • 函数一般具有返回值和参数,提供对过程的封装和细节的隐藏。
函数的分类

库函数:
为什么要有库函数?

  1. 我们在学习C语言编程时,在代码完后运行时我们要输出结果,那么我们就要把信息数据按照一定的格式打印到屏幕 (printf)函数;还有就是要频繁使用字符串拷贝工作 (strcpy)函数等;
    综上,所说的哪些功能虽然不是业务性代码。但是在开发的过程中都是会被用到的,那么为了支持可移植性和开发提高效率,,C语言就在基础库中添加这些库函数。(在使用对用的库函数是要包含对应封装该库函数的头文件

C语言常用的函数:

  • IO函数
  • 字符串操作函数
  • 字符操作函数
  • 内存操作函数
  • 时间/日期操作函数
  • 数学函数
  • 其他库函数

如何学习并且查看库函数?
www.cplusplus.com

自定义函数:
我们可知库函数并不是万能的他只是将一些开发中常用的以及一些重要的的接口进行了封装,但是并不能完成所有;更重要的就是程序员自己定义的函数,自定义函数有函数名、参数。返回值,但是不一样的就是由程序员自己设计。
函数的组成:

ret_type fun_name(para1,*)
{
	statement;//语句项
}
ret_type:返回类型
fun_name:函数名称
para1:函数参数

举一个栗子,写一个可以交换两个整型变量的内容。

#include<stdio.h>

void Swap1(int x,int y)
{
	int temp = x;
	x = y;
	y = temp;
}

void Swap2(int *px,int *py)
{
	int temp = *px;
	*px = *py;
	*py = temp;
}

int main()
{
	int num1 = 1;
	int num2 = 2;
	Swap1(num1, num2);
	printf("Swap1::num1 = %d num2 = %d\n",num1, num2);
	Swap2(&num1, &num2);
	printf("Swap2::num1 = %d num2 = %d\n",num1, num2);
	return 0;
}
函数的参数:

实际参数(实参): 真实传给函数的参数。实参可以是:常量、变量、表达式、函数等。到那会不敢实参是什么类型的变量,在函数调用时,他们必须都有确定的值,以便以传递给形参。

形式参数(形参): 指函数名后括号中的变量,因为形式参数只能在函数被调用时实例化(分配内存单元),所以叫形式参数。形式参数在函数调用完成后就会销毁,因此形式参数只在函数中有用;
上面写的函数中x、y、px、py都是形式参数,而传给函数的num1、num2、&num1、&num2都属于实际参数。

在这里插入图片描述
在这里插入图片描述
从上面的内存分配可以看到在调用函数swap1是形参x、y拥有自己的空间、同时拥有和实参一模一样的内容。所以我们可以简单地以为:形参实例化之后其实就是相当于实参的一份临时拷贝。

函数的调用

传值调用: 函数的形参和实参分别占用不同内存块,对形参的修改不会影响实参;
传址调用: 传址调用就是把函数外部创建的变量的内存地址传递给函数参数的一种调用函数的方式;这种传址的方式可以让函数和函数外部的变量建立起联系,也就是函数内部可以直接操作函数外部的变量;
嵌套调用:函数和函数之间可以进行有机的结合

#include<stio.h>
void new_line()
{
	printf("hello world\n");
}

void three_line()
{
	for(int i = 0; i < 3; i++){
		new_line();
	}
}

int main()
{
	three_line();
	return 0;
}

链式访问:把一个函数的返回值作为另外一个函数的参数

#include<stdio.h>
#include<string.h>

int main()
{
	char arr[20] = "hello";
	int ret = strlen(arr);
	printf("%d\n",ret);
	return 0;
}
函数的定义和声明

函数的声明:

1.告诉编译器有一个函数叫什么、参数是什么、返回类型是什么。但是是否存在不管心!!!
2.函数的声明一般出现在函数使用之前,满足先声明后使用
3.函数的声明一般放在头文件中

函数定义:

指的是函数的具体实现,交代代码功能

//test.h的内容 放置函数的声明
#ifndef __TEST_H__
#define __TEST_H__
//函数的声明
int Add(int x, int y
#endif //__TEST_H

//test.c的内容 放置函数的实现
#include "test.h"
//函数Add的实现
int Add(int x, int y)
{
return x+y;
}

int main()
{
	int ret = Add(1+2);
	printf("%d\n",ret);
	return 0;
}
常用的五个函数(I/O) 1. 图像载入函数 函数cvLoadImage载入指定图像文件,并返回指向该文件的IplImage指针。函数支持bmp、jpg、 png、 tiff等格式的图像。其函数原型如下: IplImage* cvLoadImage( const char* filename, int iscolor); 其中,filename 是待载入图像的名称,包括图像的扩展名;iscolor是一个辅助参数项,可选正数、零和负数三种值,正数表示作为三通道图像载入,零表示该图像作为单通道图像,负数表示载入图像的通道数由图像文件自身决定。 2. 窗口定义函数 函数cvNamedWindow定义一个窗口,用于显示图像。其函数原型如下: int cvNamedWindow( const char* name, unsigned long flags ); 其中,name是窗口名,flags是窗口属性指标值,可以选择CV_WINDOW_AUTOSIZE和0两种值。CV_WINDOW_AUTOSIZE表示窗口尺寸与图像原始尺寸相同,0表示以固定的窗口尺寸显示图像。 函数 cvDestroyWindow(const char* name);销毁以上定义的窗口。 name是窗口名 3. 图像显示函数 函数cvShowImage是在指定的窗口中显示图像,其函数原型如下: void cvShowImage( const char* name, const CvArr* image ); 其中,name是窗口名称,image是图像类型指针,一般是IplImage指针。 4. 图像保存函数 函数cvSaveImage以指定的文件名保存IplImage类型的指针变量,其函数原型如下: int cvSaveImage( const char* filename, const CvArr* image ); 其中,filename是图像保存路径和名称,image是IplImage指针变量。 5. 图像销毁函数 函数cvReleaseImage销毁已定义的IplImage指针变量,释放占用内存空间。其函数原型如下: void cvReleaseImage( IplImage** image ); 其中,image为已定义的IplImage指针
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值