c语言概要(1)

上传人:公**** 文档编号:558516202 上传时间:2023-02-27 格式:DOC 页数:9 大小:57KB
返回 下载 相关 举报
c语言概要(1)_第1页
第1页 / 共9页
c语言概要(1)_第2页
第2页 / 共9页
c语言概要(1)_第3页
第3页 / 共9页
c语言概要(1)_第4页
第4页 / 共9页
c语言概要(1)_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《c语言概要(1)》由会员分享,可在线阅读,更多相关《c语言概要(1)(9页珍藏版)》请在金锄头文库上搜索。

1、C语言概要一函数一个C语言程序由一个主函数和若干个函数构成。main函数是系统定义的。C程序的执行从main函数开始。(1)一个源程序文件有一个或多个函数组成。一个源程序文件是一个编译单位。并不是以函数为单位进行编译。(2)一个C程序分别放在若干个源文件中。(3)从用户使用角度看,函数分两类:标准函数与用户自定义函数。(4)形参的传统声明方式与现代方式不同在调用函数时,主调函数和被调用函数之间有数据传递关系。1.函数参数与函数的值在函数调用时,形参才被分配内存单元,在调用结束后,形参所占的内存单元也被释放。实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回

2、来给实参,这是与FORTRAN不同的。实参可以是常量,变量或表达式。调用结束后,实参单元仍保留并维持原值。因此,在执行一个被调用函数时,形参的值如果发生变化,并不会改变主调函数的实参的值。 主函数定义的变量,也只是在主函数中有效,而不是因为在主函数中定义而在整个文件或程序中有效,这和pascal不同。在划分模块时,要求模块的内聚性强,与其他模块的耦合性强。如果在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即它不起作用。 int a=3,b=5; max(int a,int b)int c; c=ab?a:b; return(c); /形式参数a的作用范

3、围。main()int a=8; /a是局部变量,a的作用范围在主函数。外部变量a在主函数中没有 作用范围。printf(“%d”,max(a,b);2.函数声明,函数原型函数原型function prototype函数类型 函数名(参数类型1,参数类型2,)编译系统不检查参数名。以前的C语言版本的函数声明方式不是采用函数原型,而只声明函数名和函数类型,新版本兼容这个方法,但不提倡使用,因为它未进行全面的检查。(1)main函数的位置在add函数前,而在进行编译时,从上到下逐行进行的,没有对函数的声明,编译系统不知道add(c=add(a,b))是函数名,也没法判断实参(a和b)的类型和个数是

4、否正确,无法进行正确性检查。 在调用函数前,对函数原型做函数声明,编译系统记下了所需的函数的有关信息,在对c=add(a,b)进行编译时就有章可循了。(2)被调用函数定义出现在主函数前,可不必加以声明。因为编译系统已经先知道了已定义的函数类型,会根据函数首部提供的信息对函数的调用做正确性价差。(3)已再所有函数定义之前,在函数的外部已做了函数声明,则在各个主调函数中不必对所调用的函数再做声明。二记录声明一个记录类型的一般形式:Stuct 结构体名成员表列;成员类型名 成员名1.定义结构体类型变量Struct student student1,student2;2.直接定义结构类型变量 Stuc

5、t成员表列变量名表列3.定义结构体数组与指针 #define FORMAT “%dn%sn%fn%fn%fn” Struct student int num;char name20;float score3;stu=a2345,”li li”,67,5,89,78,6;main()void print(sudent *);print(&stu);void print(struct student *p)printf(FORMAT,p-num,p-name,p-score0,p-score1,p-score2);Printf(“n”);struct student stu-1;struct st

6、udent *p;p=&stu-1;三指针与数组1.指向指针的指针eg:char *p;*p=*(*p);*p是指针变量的定义形式。char *p;定义了一个指向字符数据的指针变量。*(*p)表示指针变量p指向一个字符指针变量.*p=qchar *(*p)=*q。*p=q,p的内容是一个指针q, *p表示p是一个指针变量;char *q, q指向的内容是一个字符,q是一个指针变量;char *(*p),表示p指向的内容更是一个字符指针变量。利用指针变量访问另一个“变量”就是“间接访问”。如果在一个指针变量中存放一个目标变量的地址,就是单级间址。指向指针的指针用的是“二级间址”。在程序中很少有超

7、过二级间址的。地址值指针变量变量 (1)一级间址 (1)char *p;指针变量2指针变量1值地址2地址1(2)char *p;2.指针数组: 一个数组,其元素均为指针类型数组,称为指针数组,指针数组中的每一个元素都相当于一个指针变量。一维指针数组的定义形式为 类型名 *数组名数组长度eg. int *p4 比*优先级高,因此p先于4结合,形成p4形式,显然是一个数组,有4个元素;然后再与p前面的“*”结合,表示此数组是指针类型的(数组的元素是指针),每个数组元素都可指向一个整型变量。Int (*p)4; /指向一维数组的指针指针数组适合用来指向若干个不等长字符串,使字符串处理更加灵活方便。字

8、符串本身是一个字符数组。用二维数组指定列数。或用一维数组,用辅助存储数组。用一个比较方便的方法,分别定义一些字符串,然后用指针数组(指针用在操作,并不用来存储。只能做遍历指针,工作指针。)中的元素分别指向各字符串。如果想对字符串排序,不必改动字符串的位置,只需改动指针数组中各元素的指向(即改变各元素的值,这些值是各字符串的首地址),可改变指向,不用搬动位置,这是指针与数组的不同。移动指针变量的地址比移动字符所花时间少得多。指针数组是索引方式。nameFollow me BASICGreat WallFORTRANComputer design指针数组 字符串name0name1name2nam

9、e3name4说明:指针数组中的元素(指针单元),存放字符串首地址(指针变量的值)。因此指针与指向的单元不是一个类型。例如:指向记录的指针与记录不是一个类型,它们的字节数不同。排序结果:name0name1name2name3name4Follow me BASICGreat WallFORTRANComputer design例题:将若干字符串按字母顺序(由小到大)输出main()void sort(char *name,int n); /函数原型void print(char *name,int n); /函数声明char *name=“Follow me”,”BASIC”,”Great

10、Wall”,”RORTRAN”,”computer design”;int n=5;sort(name,n);print(name,n);void sort(char *name,int n)char *temp; int i,j,k; for(i=0;in-1;i+) k=i; /k是工作游标,指针数组的指针;只用来存储。 for(j=i+1;j0) k=j; /在i,n(i的映射范围)中选择最大的字符串namek; if(k!=i)temp=namei;namei=namek;namek=temp; void print(char *name,int n)int i; for(i=0;in;i+)printf(“%sn”,namei);3.指向指针的指针与指针数组指针数组的元素也已不指向字符串,而指向整型数据或实型数据等,例如:int a5=1,3,5,7,9,i;int *name5;int *p;for(i=0,i5;i+) namej=&ai;剩下的内容到http:/查询

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号