C语言函数
一、函数
1.任何C程序的源文件都包含两个内容:变量,函数
2.函数就是一堆语句组合,用于实现一些相对独立并且具有一定通用性的功能
3.函数特点:
由一条或者多条语句组成,可以重复使用
函数声明
1.函数声明的功能:告诉gcc编译器,将来这个函数可以给别人或者自己使用
函数声明是不分配内存空间的
2.函数声明的语法:extern 返回值数据类型 函数名(形参表);
建议:函数声明加extern(提高代码的可读性),理论上可以不加
3.函数声明特点:
a.如果函数的定义在函数调用之前,可以省略函数声明,否则必须声明
b.该声明的没有声明,那么编译器gcc就会给个默认的函数声明,形式:
extern int 函数名();
c.函数名的命名遵循标识符的命名规则
函数定义
1.函数定义的功能:就是一个函数的具体实行过程,里面会包含一堆的语句
将来可以给别人或者自己使用函数定义会分配内存
2.函数定义语法格式:
函数返回值数据类型 函数名(形参表){
函数体语句;
}
3.函数定义特点:
a.返回值数据类型:就是函数运行完毕要给使用这个函数的代码返回一个数字
那么这个数字必然有对应的数据类型
如果函数没有返回值,返回值数据类型用void关键字
b.形参表:就是一堆的变量定义,这些变量只能在这个函数体内部使用,出了函数就不能使用形参的值由使用这些函数的代码来赋值,形参的变量有多个,用逗号,分开如果使用函数的代码不想给函数传递形参,函数定义的时候形参表写void
c.函数返回值:
如果函数需要返回一个数字,用关键字return,切记如果忘记写return 返回值,gcc编译器会返回一个随机数,注意返回值的数字类型和函数定义时的返回值数据类型要一致如果不一致,会进行隐式转换,可能造成数据丢失
d.建议:形参表变量定义的个数不要超过4个,要小于等于4个,否则影响函数使用效率
函数调用
1.函数调用功能:俗称使用函数,调用函数,访问函数
2.函数使用语法:接收函数返回的变量=函数名(实参表)
3.函数调用特点:
实参表:就是给函数的形参表赋值,实参的内存空间和形参的内存空间是独立的,地址是不一样的,但里面存储的内容是一样的
函数的使用形式:
#include <stdio.h>
int main(void){
return 0;
}
//形式1:有参数有返回值
char function1(const char a){
return a;
}
//形式2:无参数有返回值
short function2(void){
return 0;
}
//形式3:有参无返回值(1参)
void function3(float a){
}
//形式4:有参数无返回值(4参数)
void function4(double a,double b){
}
//形式5:无参无返回值
void function5(void){
}
例如
#include <stdio.h>
extern int add(const int,const int);//函数声明,不分配内存空间
extern void print(const int);//函数声明,不分配内存空间
extern void clear_bit(int *const,const int);
extern void set_bit(int *const,const int);
/*在调用函数前定义函数无需声明*/
//定义sub函数,实现将某两个数相减
int sub(int a,int b){
return a-b;
}
int main(void){
int a=100,b=200;
int ret;
//调用add函数,并把a,b变量当实参给add函数形参表赋值
ret=add(100,200);
//调用print函数
print(ret);
//调用sub函数
ret=sub(a,b);
print(ret);
//定义并初始化
int number=0xDF;
//调用clear_bit函数
clear_bit(&number,2);
print(number);
//调用set_bit函数
str_bit(&number,2);
print(number);
return 0;
}
/*在调用函数后定义函数需要声明*/
//定义add函数,实现将某两个数相加
int add(const int a,const int b){
return a+b;
}
//定义print函数,实现将某数答应
void print(const int a){
printf("%d\n",*a);
}
//定义clear_bit函数,实现将某数的第N位清0
void clear_bit(int *const pa,const int n){
*pa &= ~(1 << n);
}
//定义set_bit函数,实现将某数的第N位置1
void set_bit(int *const pa,const int n){
*pa |= (1 << n);
}
return关键字和exit(int)函数
return关键字:实现函数返回
exit(int)函数:让程序强制结束,需要田间头文件:#include <stdlib.h>
实参与形参
形参就是实参的一份拷贝,实参给形参传递参数时,就是将实参里面的数字拷贝一份给形参
二.函数与数组
函数访问数组编号技巧
void 函数名(数组的首地址, 数组的长度)
{
可查看数组元素
可修改数组元素
}
例如
#include <stdio.h>
extern void swap(int[]);
extern void clear_array_bit(int[],const int,const int);
extern void set_array_bit(int [],const int,const int);
int main(void){
int a{2]={1,2};
return 0;
}
void swpa(int a[]){
int b=a[0];
a[0] = a[1];
a[1] = b;
}
void clear_array_bit(int a[],const int n,const int m){
a[n] &= ~(1 << m);
}
void set_array_bit(int a[],const int n,const int m){
a[n] |= (1 << m);
}