函数概述及定义
构成c语言程序的基本单元式函数,函数中包含的是可执行的代码。每个c程序的入口和出口都是main函数。c语言函数内部再定义函数是错误的。
函数定义
函数头
由三个部分构成 ①返回值类型②函数名③参数表
函数体
由两部分构成
①局部变量的声明
②可执行程序
注:在程序中编写函数时,要先对函数进行声明,在对函数进行定义。
声明是让编译器知道函数的一些基本配置,定义是让编译器知道函数的功能。
函数参数
形式参数
在定义函数时,函数名后面的括号中的变量名,在函数调用之前,传递给函数的值将被赋值到这些形式参数中。
实际参数
在调用一个函数时,函数的调用者提供给函数的参数。实际参数是表达式计算的结果,并且复制给函数的形式参数。
数组作为函数参数
当数组作为函数的参数是只传递数组的地址,而不是将整个数组赋值到函数中。
当数组名作为实参调用函数时,指向该数组的第一个元素地址的指针就被传递到函数中。与变量作为实参一样是单项传递的。
/*///*/
/* 数组名作为实参调用函数 */
/*///*/
#include<stdio.h>
void Evaluate(int iArrayName[10]); /*声明赋值函数*/
void Display(int iArrayName[10]); /*声明显示函数*/
int main()
{
int iArray[10]; /*定义一个具有10个元素的整型数组*/
Evaluate(iArray); /*调用函数进行赋值操作,将数组名作为参数*/
Display(iArray); /*调用函数进行赋值操作,将数组名作为参数*/
return 0;
}
/*///*/
/* 数组元素的显示 */
/*///*/
void Display(int iArrayName[10])
{
int i;
for(i=0;i<10;i++)
{
printf("the member number is %d\n",iArrayName[i]);
}
}
/*///*/
/* 进行数组元素的赋值 */
/*///*/
void Evaluate(int iArrayName[10])
{
int i;
for(i=0;i<10;i++)
{
iArrayName[i]=i;
}
}
/*///*/
/* 可变长度的数组作为实参 */
/*///*/
#include<stdio.h>
void Evaluate(int iArrayName[]); /*声明函数,参数为可变长度数组*/
void Display(int iArrayName[]); /*声明函数,参数为可变长度数组*/
int main()
{
int iArray[10];/*定义一个具有10个元素的整型数组*/
Evaluate(iArray);/*调用函数进行赋值操作,将数组名作为参数*/
Display(iArray);/*调用函数进行赋值操作,将数组名作为参数*/
return 0;
}
/*///*/
/* 数组元素的显示 */
/*//*/
void Display(int iArrayName[]) /*定义函数,参数为可变长度数组*/
{
int i; /*定义整型变量*/
for(i=0;i<10;i++)/*执行循环的语句*/
{ /*在循环语句中执行输出操作*/
printf("the member number is %d\n",iArrayName[i]);
}
}
/*///*/
/* 进行数组元素的赋值 */
/*///*/
void Evaluate(int iArrayName[]) /*定义函数,参数为可变长度数组*/
{
int i; /*定义整型变量*/
for(i=0;i<10;i++)/*执行循环语句*/
{ /*在循环语句中执行赋值操作*/
iArrayName[i]=i;
}
}
使用指针作为函数参数
当数组作为函数的实参时,只传递数组的地址。当使用数组名作为实参时,指向该
数组元素的指针就被传递到函数中。
/*///*/
/* 指针作为形参,数组名作为实参 */
/*///*/
#include<stdio.h>
void Evaluate(int* pPoint); /*声明函数,参数为可变长度数组*/
void Display(int* pPoint); /*声明函数,参数为可变长度数组*/
int main()
{
int iArray[10]; /*定义一个具有10个元素的整型数组*/
Evaluate(iArray); /*调用函数进行赋值操作,将数组名作为参数*/
Display(iArray); /*调用函数进行赋值操作,将数组名作为参数*/
return 0;
}
/*///*/
/* 数组元素的显示 */
/*//*/
void Display(int* pPoint) /*定义函数,参数为可变长度数组*/
{
int i; /*定义整型变量*/
for(i=0;i<10;i++) /*执行循环的语句*/
{ /*在循环语句中执行输出操作*/
printf("the member number is %d\n",pPoint[i]);
}
}
/*///*/
/* 进行数组元素的赋值 */
/*///*/
void Evaluate(int* pPoint) /*定义函数,参数为可变长度数组*/
{
int i; /*定义整型变量*/
for(i=0;i<10;i++) /*执行循环语句*/
{ /*在循环语句中执行赋值操作*/
pPoint[i]=i;
}
}
main的参数
main(int argc , char *argv[])
两个特殊的内部形参argc和argv是用来接受命令行实参的。这是只有主函数main才具有的形式参数。
内部函数和外部函数
内部函数
定义一个函数,如果希望这个函数只被所在的源文件所使用,这样的函数成为内部函数,又称静态函数。
static 返回类型 函数名(参数列表);
外部函数
外部函数是可以被其他源文件调用的函数。
extern 返回类型 函数名(参数列表);
局部变量和全局变量
局部变量
在一个函数内部定义的变量,无法被别的函数使用,作用范围仅为函数内部的所有语句块。
在c语言中位于不同的作用于的变量可以起相同的变量名。此时内层作用域中的变量将屏蔽外层作用域中的变量。
全局变量
定义全局变量的作用是增加函数间数据联系的通道。同一文件中的所有函数都能够音乐用全局变量的值。
函数应用
常用库函数
数学库函数
引用maths.h
abs函数
功能:求整数的绝对值
int abs(int i);
labs函数
功能:求长整数的绝对值
long abs(long i);
fabs函数
功能:求浮点数的绝对值
double abs(double i);
sin函数
double sin(double i);
cos函数
double cos(double i);
tan函数
double tan(double i);
字符和字符串函数
isalpha函数
引用ctype.h
功能:检测字母,若是字母表中的字母返回非0
int isalpha(int ch);
isdigit函数
引用ctype.h
功能:检测数字,若是数字则返回非0
int isdigit(int ch);
isalnum函数
引用ctype.h
功能:检测字母或数字,若是则返回非0