大家都知道C语言是一种面向过程的语言,它的特点就是对步骤和过程的细节操作。当面临编写大型的程序时,代码量是会很多的。都是细节的话,很不容易抓住重点的,程序可读性和维护性都很低。为了克服这个缺点,有了模块化的编程思想。
把能够实现特定功能的代码块包装起来,放到函数里面;需要使用的时候,直接整体调用。
这样每次使用的时候直接调用函数,就可以实现模块思想,同时还能重复使用以前的代码,及简化编程的难度。
一、函数的定义
函数可以放在任何位置,在前面使用需要先声明:形式如下
返回值类型 函数名(形参类型1 形参名1,形参类型1 形参名1,……);
定义如下
返回值类型 函数名(形参类型1 形参名1,形参类型1 形参名1,……)
{
语句;
return 返回值;
}
二、函数的使用
使用函数时直接调用,如果在另外一个文件中,需要导入那个文件。调用函数时,会生成相应的临时形参变量,把实参的值传递给形参,形参参与运算,函数结束时,返回值;之后临时的形参变量释放。通过指针的地址传递可以对原来的实参进行操作。
函数名(实参1,实参2);
#include<stdio.h> //如果本文件没有保存,没有文件名,则编译错误,找不到导入的文件reover.cpp #include "reover.cpp" main() { int a[100],i=0,t; printf("请输入数组中整数:0结束\n"); do{ scanf("%d",a+i++); }while(a[i-1]); reover(a,i-1); for(t=0;t<i-1;t++) printf("%d\n",a[t]); }void reover(int * p,int n) { int i,k=n/2,t=0; for(i=0;i<k;i++) { t=p[i]; p[i]=p[n-1-i]; p[n-1-i]=t; } }#include<stdio.h> //返回字符串p的长度 int strlen(char *p) { int i; for(i=0;p[i];i++); return i; } //相等返回0,不相等但是长度一样返回-2 //p1长度大于p2返回1,p1长度小于p2返回-1 int strcmp(char *p1,char *p2) { int i,k,t; k=strlen(p1); t=strlen(p2); if(k==t) { for(i=0;p1[i]==p2[i];i++) if(!p1[i]) return 0; return -2; } else if(k<t) return -1; else return 1; } //p2全部拷贝到P1;返回字符串p1 char * strcpy(char *p1,char *p2) { int i; for(i=0;p1[i]=p2[i],p2[i];i++); return p1; } main() { int k; char c[4]; printf("\nc=%s\n",c); char a[]="abcdjr"; char b[]="abc"; k=strcmp(c,b); printf("%d\n",k); printf("\na=%s\n",a); printf("\nb=%s\n",b); strcpy(c,b); printf("\nb->c=%s\n",c); strcpy(c,a); printf("\na->c=%s\n",c); }