c语言基础(第八期:函数与结构体) |
您所在的位置:网站首页 › c语言结构体成员函数 › c语言基础(第八期:函数与结构体) |
目录 一、函数 1.函数的声明与定义 2.函数的递归与调用 3.局部变量与全局变量 二、结构体 1.结构体对齐 2.结构体指针与typedef的使用 一、函数 1.函数的定义与声明函数间的调用关系是,由主函数调用其他函数,其他函数也可以互相调用,同一个函数可以被一个或多个函数调用任意次 c语言的编译和执行具有以下特点: (1)一个c语言程序由一个或多个程序模块组成,每个程序模块作为一个源程序文件,对于较大的程序,通常将程序内容分别放在若干源文件中,再由若干个源程序组成一个c程序,这样处理便于分别编写,分别编译,进而提高调试效率,一个源程序文件可以为多个c程序共用。 (2)一个源程序文件由一个或多个函数及其他有关内容(命令行,数据定义等)组成,一个源程序文件是一个编译单位,在程序编译时是以源程序文件为单位而不是以函数为单位进行编译的 (3)c程序的执行是从main函数开始的,如果在main函数中调用其他函数,那么在调用后会返回到main函数中,在main函数中结束整个程序的运行。 (4)所有函数都是平行的,即在定义函数时是分别进行的,并且是相互独立的,一个函数并不属于另一函数,即函数不能嵌套定义,函数间可以相互调用,但不能调用main函数,main函数是系统调用的。 (5)函数的声明与定义的差异如下: I.函数的定义是指对函数功能的确立,包括指定函数名,函数值类型,形参以及类型、函数体等,它是一个完整的、独立的函数单位。 II.函数的声明的作用是把函数的名字,函数类型及形参的类型、个数和顺序通知编译系统,以便再调用该函数时编译系统能正确识别函数并检查调用是否合法 2.函数的分类与调用从用户角度来看,函数分为两种: (1)标准函数:即库函数,这是系统提供的,用户不必自己定义的函数,可以直接使用他们,如:printf函数,scanf函数 (2)用户自己定义的函数:用以解决用户的专门需要。 又分为两种函数: I.无参函数:一般用来执行指定的一组操作,在调用无参函数时,主调函数不向被调用函数传送数据 定义形式: 类型标识符 函数名(){ 声明部分; 语句部分 } II.有参函数:主调函数在调用被调用函数时,通过参数向被调用函数传递数据。 定义形式: 类型标识符 函数名(形式参数表列){ 声明部分; 语句部分 } 3.函数的递归与调用我们把函数自身调用自身的操作,称为递归调用,递归函数一定要有结束条件,否则会产生死循环。 例子:求数字的阶乘与走楼梯: #include int f(int n){ int (1==n){ return 1; } return n*f(n-1); } //走楼梯 int step(int n){ if(1==n){ return 1; } if(2==n){ return 2; } return step(n-1)+step(n-2); } int main(){ int n; int ret; scanf("%d",&n); ret=f(n); printf("%d\n",ret); scanf("%d",&n); ret=step(n); printf("%d\n",ret); return 0; } 4.局部变量与全局变量(1)全局变量解析—形参—实参解析 在不同的函数之间传递数据时,可以使用的方法如下: (1)实参:通过形式参数和实际参数 (2)返回值:用return语句返回计算结果 (3)全局变量:外部变量 代码示例: #include int i=10;//全局变量 void print(int a){ printf("print i=%d\n",i); } int main(){ { int j=5; } printf("main i=%d\n",i); i=5; printf(i); return 0; }全局变量i存储在数据段,所以main函数和print函数都是可见的,全局变量不会因为某个函数执行而消失,在整个进程的执行过程中始终有效,因此在工作中应该减少使用全局变量。 (2)局部变量与全局变量 I.内部变量:在一个函数内部定义的、的变量叫做内部变量,他只在本函数范围内有效。 关于局部变量使用时需要注意几点: a.主函数中定义的变量只在主函数中有效,,而不因为在主函数中定义而在整个文件或程序中有效,主函数也不能使用其他函数中定义的变量。 b.不同函数中可以使用相同名字的变量,他们代表不同的对象,互不干扰。 c.形式参数也是局部变量 d.在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合语句也称"分程序"或”程序块" II.外部变量 函数之外定义的变量叫作外部变量,外部变量可以为文件中的其他函数共用,他的有效范围是从定义变量的位置开始到本源文件结束,所以也称全程变量。 二、结构体 1.结构体的定义、初始化、结构体数组有时候需要将不同类型的数组为一个整体,以便于引用,例如,一名学生有学号,姓名,性别,年龄,地址等属性,如果针对学生的学号,姓名,年龄等都定义一个变量,那么在有多名学生时,变量就难以分清,为此c语言提供结构体来管理不同类型的数据组合。 struct 结构体名 {成员表列}; 例如: struct student { int number;char name[20];char sex; int age; float score; char addr[20]; }; 先声明结构液体类型,在定义变量名: struct student student1,student2; #include struct student{ int num; char name[20]; char sex; int age; float score; char addr[30]; }; int main(){ struct student s={1001,"lele",20,85.4,"tianjin"}; struct student sarr[3]; int i; printf("%d %s %c %f %s\n",s.num,s.name,s.sex,s.age,s,score,s,addr); for(i=0;inum,p->name,p->sex,p->age,p->score,p->addr); p=sarr; printf("%d %s %c %f %s\n",(*p).num,(*p).name,(*p).sex,(*p).age,(*p).score,(*p).addr);//方式一 printf("%d %s %c %f %s\n",p->num,p->name,p->sex,p->age,p->score,p->addr);//方式二 p=p+1; printf("%d %s %c %f %s\n",p->num,p->name,p->sex,p->age,p->score,p->addr); return 0; }(2)typedef的使用 typedef的优点是可以使用typedef声明新的类型名来代替已有的类型名。 #include typedef struct student{ int num; char name[20]; char sex; }stu,*pstu; typedef int INTEGER; int main(){ stu s={1001,"wangle",'M'}; pstu p; INTEGER i =10; p=&s; printf("i=%d,p->num=%d\n",i,p->num); return 0; } |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |