语言基础知识汇总精选PPT_第1页
语言基础知识汇总精选PPT_第2页
语言基础知识汇总精选PPT_第3页
语言基础知识汇总精选PPT_第4页
语言基础知识汇总精选PPT_第5页
已阅读5页,还剩63页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、关于语言基础知识汇总第一张,PPT共六十八页,创作于2022年6月21 C+语言的字符集与词汇1.字符集 (1)字母 A B C D Z a b c d z (2)数字 0 1 2 3 4 5 6 7 8 9 (3)特殊符号 空格 ! # $ % & . ( ) * + ,- ? / : ; _ | 第二张,PPT共六十八页,创作于2022年6月32.词汇:五类 (1)关键字(保留字):系统预定义且有专门含义的单词,不允许另作它用 .C+的关键字包含了C语言的几乎所有关键字 .C+的关键字随C+的发展而不断增加 (2)标识符:由程序员为程序中的各种成份定义的名字 .以字母或_开头,由字母、_、

2、数字组成 .不能是关键字 .C+中的标识符区分大小写 .见名知义的原则 .C+系统对标识符的长度有一定限制 (3)直接常量 (4)运算符 (5)分隔符:用来分隔不同的语法成份的单词 空格 ; # ( ) /* */ /*C+的两种注释: ./*/ ./ 注释到行尾第三张,PPT共六十八页,创作于2022年6月42 基本数据类型、运算符与表达式一.数据类型每一项数据都唯一的属于某种类型每一数据类型都有一个明确定义的值的集合每一类型的数据占用相同大小的存储空间同一类型的数据可以进行相同类型的运算数据类型简单类型复合类型指针类型 * 用户定义类型 enum 基本类型整型 int浮点型 float字符

3、型 char空类型 void布尔型 bool数组 结构体 struct共用体 union类 class1.C+的数据类型基本类型是由系统定义,各种语言都具备的类型复合类型与指针类型都属于用户定义类型第四张,PPT共六十八页,创作于2022年6月52.基本类型int型:整型 VC中占4字节float型: 浮点型 4字节char型: 字符型 1字节void型: 空类型bool型: 布尔型 1字节 值为 true 或 false*修饰说明符long与short、signed与unsignedlong和short修改整型具有的最大值和最小值signed和unsigned告诉编译器如何处理整型和字符型数

4、据的最高位float型可用double和long double修饰,修改实型数据的表数范围和精度第五张,PPT共六十八页,创作于2022年6月6类型名字节数取值范围 bool1 true、false char1 -128 - 127 signed char1 -128 - 127 unsigned char1 0 - 255 int4 -231 - 231-1 signed int4 -231 - 231-1 unsigned int4 0 - 232-1 signed short int2 -32768 - 32767 unsigned short int2 0 - 216-1 signed

5、 long int4 -231 - 231-1 unsigned long int4 0 - 232-1 float4 -3.4E(+/-)38 - 3.4E(+/-)38 double float8 -1.7E(+/-)308 - 1.7E(+/-)308 long double float10 -3.4E(+/-)4932 - 3.4E(+/-)4932C+中的全部基本类型第六张,PPT共六十八页,创作于2022年6月7二.运算符与表达式 1.运算符算术运算符:+ - * / % + -关系运算符: = = = !=逻辑运算符:& | !位运算符:& | 赋值运算符:= += -= *=

6、/= %= = &= |= =条件运算符:?:逗号运算符:,指针运算符:&*求字节运算符:sizeof函数调用运算符、强制类型转换运算符:()分量运算符: . -数组下标运算符:作用范围分解运算符::动态内存分配符:new、delete插入提取运算符:第七张,PPT共六十八页,创作于2022年6月8运算符的优先级与结合性运算符含义要求操作对象数目结合性(): . -括号作用范围分解(限定)运算符数组下标运算符成员运算符左-右+ - &*!+ -( )sizeofnew delete自增 自减取地址指针引用逻辑非按位取反正 负号强制类型转换求字节动态分配 释放内存1右-左* / %乘法 除法 求

7、余2左-右+ -加法 减法2第八张,PPT共六十八页,创作于2022年6月9运算符的优先级与结合性(续表)运算符含义要求操作对象数目结合性左移 右移运算符2左-右 =小于 小于等于大于 大于等于= !=等于 不等于&|按位与按位异或按位或&逻辑与|逻辑或?:条件运算符3右-左= += -= *= /= %= = &= = |=赋值运算符扩展的赋值运算符2右-左,逗号运算符2左-右第九张,PPT共六十八页,创作于2022年6月10C+中的类型转换转换运算符:()两种强制类型转换的方法:(目标类型名)表达式: float x = 2.5; int y; y = (int)x;目标类型名(表达式):

8、 float x = 2.5; int y; y = int(x);C+中的显式转换static_cast可以不用强制类型转换但一定会发生转换的地方(为了更清楚、更醒目而使用)const_cast对const和volatile进行转换reinterpret_cast转换为完全不同的意思,必须转换回原来的类型才能安全的使用,最为危险dynamic_cast把基类对象(指针)转换为派生类对象(指针)时使用使用方式 转换用关键字(待转换的表达式)第十张,PPT共六十八页,创作于2022年6月11例:static_castvoid func(int) void main()int i=0 x7fff;

9、 long l; float f;l = i; f = i; /更好的方法是使用static_castl = static_cast(i);f = static_cast(i);i = l; i= f; /以上两条语句会出Warning,可使用如下方式消除i = static_cast(l); i = static_cast(f);char c = static_cast(i);void *vp = &f;float *fp = (float*)vp; /C的方法,不好fp = static_cast(vp); /更好的方法double d = 0.0;int x = d; /自动发生隐式类型

10、转换x = (int)d; /C的方法,不好x = static_cast(d); /更好的方法func(d); /自动发生隐式类型转换func(static_cast(d); /更好的方法第十一张,PPT共六十八页,创作于2022年6月12例:const_castvoid main()const int i = 0;/int *j = &i; /错误,不允许这样赋值int *k = (int*)&i; /被摒弃的方法k = const_cast(&i);/long *l = const_cast(&i); /错误,不允许同时进行const*-nonConst* /和nonConst*-lon

11、g*两项转换第十二张,PPT共六十八页,创作于2022年6月13例:reinterpret_cast#include using namespace std;const int sz=100;struct Xint asz;void print(X* x)for (int i=0;isz;i+)cout ai ;cout endl - endl;void main()X x;print(&x);int *xp = reinterpret_cast(&x);for(int *i=xp;ixp+sz;i+) *i = 10;print(reinterpret_cast(xp);print(&x);

12、第十三张,PPT共六十八页,创作于2022年6月142.表达式 由运算符连接操作数构成的式子算术表达式关系表达式逻辑表达式赋值表达式条件表达式逗号表达式第十四张,PPT共六十八页,创作于2022年6月153 常量与变量一.C+中的常量 1.直接常量(字面常量): 10,10.5,A, string .int型 .float型 .char型 .字符串常量 .bool型:true、false 2.符号常量:C+中有两种符号常量#define定义的常量 例:#define pi 3.1415926关键字const定义的常量 例:const int sz = 100;#define定义的常量,在预处理

13、时只是字符串的替换,对编译器而言,不带有任何类型信息,不便于查错;而const定义的常量带有类型信息,故优于#define定义的常量C+推荐使用const定义的常量第十五张,PPT共六十八页,创作于2022年6月16const常量定义语法: const 类型名 常量名 = 常量值;或 类型名 const 常量名 = 常量值;例:const float pi=3.14; float const pi=3.14; const int min=50; int const min=50; const int max=2*min; int const max=2*min;const定义的常量,相当于定义

14、了一个相应类型的变量,但其值不能发生改变 例:const int min = 50; min = 40; /错误,不能改变min的值 所以,定义const常量的同时必须初始化,且一旦初始化后,就不会(因不能故不会)再发生变化。因此在作用范围内若某变量的值不会发生改变,则定义该变量时应用const进行限定,以免无意中改变该变量的值const常量是编译时的常量 例:const int sz = 100; int arrsz;第十六张,PPT共六十八页,创作于2022年6月17const与指针1.指向常量的指针:限定指针所指的对象、变量 定义形式: const 类型 * 指针变量=地址表达式; 或

15、类型 const * 指针变量=地址表达式;例:int var = 35; const int max = 100; int *p; const int *p1_const; const int *p2_const; p1_const = &var; p2_const = &max; var=40; *p1_const = 100; *p2_const = 200; max = 200; p = &max;p1_const和p2_const,var不是常量*p1_const和*p2_const、max是常量第十七张,PPT共六十八页,创作于2022年6月18指向常量的指针const int *

16、p1_constconst int *p2_constconst int maxint varp1_const不是常量,p1_const指向的变量的值不能通过 *p1_const 改变,但p1_const指向的变量即var本身不是常量,是可以改变的,故 *p1_const=100; var=40;p2_const不是常量,p2_const指向的变量的值不能通过 *p2_const 改变,且p2_const指向的变量即max本身是常量,其值不能改变,故 *p2_const=200; max=200;第十八张,PPT共六十八页,创作于2022年6月192.指针常量:指针变量本身的值初始化后不能再改

17、变 定义方式: 类型 * const 指针变量 = 地址表达式;例:int var1 = 100,var2 = 200; const int max = 1000; int * const cst_p1 = &var1; int * const cst_p2 = &max; *cst_p1 = var2; cst_p1 = &var2; 只说明了指针变量如cst_p1本身是常量,但并没有说不能改变*cst_p1的值必须要赋初值第十九张,PPT共六十八页,创作于2022年6月203.指向常量的指针常量 指针变量本身和所指对象的值都为常量,不能改变 定义方式: const 类型 * const 指

18、针变量 = 地址表达式; 或 类型 const * const 指针变量 = 地址表达式; 例:int var1 = 128,var2 = 256; const int max = 1000; const int *const doubleCst_p1 = &var1; const int *const doubleCst_p2 = &max; doubleCst_p1 = &var2; *doubleCst_p1 = 500; var1 = max-var2; 第二十张,PPT共六十八页,创作于2022年6月21二.C+中的变量变量必须先定义(声明)再使用变量的定义 存储类型 数据类型名 变

19、量名列表;C+中几乎 随处可以定义变量 例: for(int i=0;i100;i+) if(i 100) int x = 0; x += 100; int y = 10; 变量的分类:根据定义变量的位置,分为两类:全局变量(外部变量)局部变量(内部变量)第二十一张,PPT共六十八页,创作于2022年6月22变量的存储类型存储方式:动态存储方式和静态存储方式静态存储方式:程序运行过程中给此类变量分配固定的存储空间动态存储方式:程序运行过程中根据需要,给此类变量动态分配存储空间程序代码区静态存储区动态存储区程序的存储组织第二十二张,PPT共六十八页,创作于2022年6月23变量的存储类型auto

20、、register、static、extern和默认五种auto:自动类型 普通的局部变量都属于此类,分配在动态存储区中register:寄存器类型static:静态变量静态局部变量:在静态区中,只初始化一次,多次调用函数时能保留前一次函数调用结束时的值,延长了该变量的生存期静态全局变量:在静态区中,限制了该变量的作用域extern:外部变量定义全局变量声明外部变量:扩展了全局变量的作用域第二十三张,PPT共六十八页,创作于2022年6月24例:static#include using namespace std;int factor(int n) static int result = 1;

21、 result *= n; return result;void main() for(int i=1;i=8;i+)cout factor(i) ; cout endl;第二十四张,PPT共六十八页,创作于2022年6月25例:extern/main.cpp#include using namespace std;extern int nTestVar;void main() nTestVar = 100; cout nTestVar 变量 向流中添加数据的操作称为插入操作: 流对象数据 :提取运算符cin和cout是C+预定义的流对象 cout:用于进行输出操作,与显示器相关联 cin:用

22、于进行输入操作,与键盘相关联第二十八张,PPT共六十八页,创作于2022年6月29 用法: cout表达式1表达式2 变量1变量2变量n;可以串联多个同样也可以串联多个给多个变量输入数据 输入时多个数据项之间用空格、Tab或回车分隔具有智能,能够自动判断其后的数据项的类型,并采用相应的类型进行输出或输入使用流对象时,必须#include相应的头文件(如iostream)并使用语句“using namespace std;”打开名称空间stdcin与cout在iostream中的std名称空间中定义第二十九张,PPT共六十八页,创作于2022年6月30二.简单的输入/输出格式控制:使用操纵符(m

23、anipulator)I/O流类库中提供了若干个操纵符,可以直接嵌入到输入/输出语句中实现I/O格式控制操纵符功能endl输出一个换行符,并刷新流dec用十进制输入或输出数值oct用八进制输入或输出数值hex用十六进制输入或输出数值ends输出一个空格符,并刷新流setw(int n)设置其后一个数据项占据的宽度setfill(char c)设置数据项宽度不足时的填充字符setprecision(int n)设置浮点数输出小数位数常用的I/O操纵符第三十张,PPT共六十八页,创作于2022年6月31说明:不带参数的I/O操纵符定义在iostream中使用带参数的I/O操纵符,需包含iomani

24、psetw()只对其后紧跟着的一个真正的数据项起作用例:coutAendsBendl; couthex255ends32endl; coutdecsetw(5)setfill(0)32endl; coutsetw(5)setprecision(4)7.5612endl;屏幕输出第三十一张,PPT共六十八页,创作于2022年6月325 基本控制结构顺序、选择(分支)和循环结构对应的控制语句控制语句无条件控制语句条件控制语句分支语句循环语句if语句switch语句switch语句for语句while语句do-while语句break语句continue语句return语句goto语句第三十二张,P

25、PT共六十八页,创作于2022年6月336 数组、结构体、共用体和枚举类型一.数组:需要处理相同类型的一批相关数据时使用数组分为一维数组与多维数组 定义: 一维数组:类型 数组变量名数组长度; 二维数组:类型 数组变量名第一维长度第二维长度; 例: int nArr10; int nArr2d105;说明:数组长度必须是常量表达式:编译时求值C意义上的字符串采用字符数组作为其存储形式,在最后添加一个ASCII码为0的字符作为字符串的结束标志第三十三张,PPT共六十八页,创作于2022年6月34string类:字符串类string类封装了字符串的基本特性和对字符串的典型操作,其对象可用于保存几乎

26、任意长的字符串,对处理输入文件中一行上字符数不定的情况特别有用string类是STL中的类,使用时需要包含头文件string并打开名称空间stdstring类的操作:成员函数求串长:size()、length()例:#include #include using namespace std;void PrintAttribute(const string &str)cout size: str.size() endl;cout length: str.length() endl;第三十四张,PPT共六十八页,创作于2022年6月35int main()string s1,s2;PrintAtt

27、ribute(s1); s1 = My string object; PrintAttribute(s1);s2 = Another String Object; PrintAttribute(s2);return 0;第三十五张,PPT共六十八页,创作于2022年6月36赋值:assign() = s1.assign(s2); s1 = s2;连接:append += + s1.append(s2); s1+=s2; s1=s1+s2;下标: s10#include #include using namespace std;int main() string s1 = cat ,s2,s3;

28、 s2 = s1; s3.assign(jump ); cout s2 s3 endl; s1 += s3; cout s1 endl; s1.append(and yell); cout s1 endl; s10 = h; cout s1 endl; return 0;第三十六张,PPT共六十八页,创作于2022年6月37比较string pare(s2);比较字符串s1与s2,当s1等于s2时,返回0;当s1大于s2时返回正值,否则返回负值字符串的部分比较 pare(beg1,len1,s2,beg2,len2); beg1和len1指示s1参与比较的开始字符的下标与长度,beg2和len

29、2指示s2参与比较的开始字符的下标与长度运算符:!= =第三十七张,PPT共六十八页,创作于2022年6月38例:string的比较: 字符串的排序#include #include using namespace std;int main() string names = Li Hua,He XiaoMing,Zhang Li, Sun Fei,Chen Bao; string s; int i,j,k,nmb; nmb = sizeof(names)/sizeof(names0); for(i=0;inmb-1;i+) k = i; for (j=i+1;jnamesj) k = j; i

30、f(k!=i) s = namesk; namesk = namesi; namesi = s; for(i=0;inmb;i+)cout name i = namesi endl;return 0;第三十八张,PPT共六十八页,创作于2022年6月39子串:substr() s.substr(beg,len); beg指定子串的开始下标,len指定读取的字符数 string s = C+ program design; cout s.substr(4,7) endl;查找:find() s.find(substring); s.find(substring,beginning);替换:rep

31、lace() s.replace(beg,num,str);第三十九张,PPT共六十八页,创作于2022年6月40例:把字母表中的逗号“,”全部替换为分号“;”#include #include using namespace std;int main() string alphabet = A,B,C,D,E,F,G,H,I,J,K,L,M, N,O,P,Q,R,S,T,U,V,W,X,Y,Z;int x = alphabet.find(,);while(x = 0) alphabet.replace(x,1,;); x = alphabet.find(,x+1);cout alphabet

32、 endl;return 0;第四十张,PPT共六十八页,创作于2022年6月41插入:insert() s1.insert(n,s2); 例:string s1 = cat jump; string s2 = dog ; s1.insert(4,s2); s1.insert(4,and ); cout s1 endl;第四十一张,PPT共六十八页,创作于2022年6月42转换成C语言式的char*型字符串:data() c_str() copy() char * ptr=s.data(); /char * ptr=s.c_str(); s.copy(buffer,n,begin);#incl

33、ude #include using namespace std;int main()string s = String Object;const char *ptr1;ptr1 = s.data();int len = s.length();char *ptr2 = new charlen+1;s.copy(ptr2,len,0); ptr2len = 0;cout s endl; cout ptr1 endl;cout ptr2 endl;delete ptr2;return 0;第四十二张,PPT共六十八页,创作于2022年6月43从文件中输入一行字符:getline() getline

34、(in,str,ch); 其中:in为输入流对象 str为string类对象 ch为结束输入的字符,默认为n 例:string s; getline(cin,s,n); 从键盘输入一行字符(以回车结束),存入s中第四十三张,PPT共六十八页,创作于2022年6月44例:从文件中输入一行数据#include #include #include using namespace std;int main() string line; ifstream input(input.txt,ios:in);while(1) getline(input,line); if(input.eof() break;

35、/一行数据已存入line中,可对其处理,此处只将其输出 cout line endl;input.close();return 0;第四十四张,PPT共六十八页,创作于2022年6月45二.结构体:struct三.共用体:unionstruct in_addr union struct unsigned chars_b1,s_b2,s_b3,s_b4;S_un_b; struct unsignedshorts_w1,s_w2;S_un_w; unsigned longS_addr; S_un; 四.枚举类型:enum 与C中几乎一样*:自定义的数据类型可以象C+的基本数据类型一样使用例:in_

36、addr IP_Address;第四十五张,PPT共六十八页,创作于2022年6月467 指针、动态内存分配与引用 .程序访问内存中数据的两种方式 .直接访问 .间接访问 .指针就是地址,存放地址的变量就是指针变量 .指针变量的定义: 数据类型名 * 指针变量名; 或 数据类型名 * 指针变量名=初始地址值;200X200X&Xpx例:float *ptr; float x = 200.0; float *px = &x; float *pn = NULL; float *pr;指针变量的三种状态 .指向某一变量 .被赋予空值NULL,未指向任何变量 .未赋值,处于“悬空”(随机)状态一.指针

37、第四十六张,PPT共六十八页,创作于2022年6月47 .与地址有关的运算符: & 和 * .取地址运算&:得到一个变量的地址 .一元运算符 .其后只能是一个变量名,不能是常量或表达式 .指针运算符*:取指针指向的变量的值 .一元运算符 .其后为一指针 例:*px = 300.0; x = 300.0; *与&互为逆运算第四十七张,PPT共六十八页,创作于2022年6月48 .指针的运算 .算术运算 指针可以和整数进行+、-运算,指针变量本身也可以进行+、-运算 指针的算术运算一般和数组的使用相联系 .关系运算:在指向相同类型数据的指针之间进行比较 .指针可以进行相等和不等的比较,指向同一变量

38、(地址)时相等,否则不相等 .任一指针可以和指针常量NULL进行相等和不等的比较 .指针指向数组元素时,指针之间可以进行大小比较第四十八张,PPT共六十八页,创作于2022年6月49 .指针变量的使用 .指向一个变量:间接访问该变量 .指针变量与数组关联使用: .指向数组元素 例:int arr10; int *ptr; ptr=&arr0;/ptr=arr;数组名是数组首元素的地址 .指向数组 定义方式:类型名 (*指针变量名)数组长度; 例:int a24; int (*pa)4; /定义pa为指向一维整型数组的指 /针,该一维数组有4个元素 pa = a; / pa = &a0; pa+

39、; / pa指向a1,则 pa = &a1区别二者的算术运算 使用时必须确保指向一个确定的有意义的空间第四十九张,PPT共六十八页,创作于2022年6月50 .指针数组: 数组中的每个元素都相当于一个指针变量 定义形式: 类型名 *数组名数组长度; 例: int a,b,c; int * parr3; parr0 = &a; parr1 = &b; parr2 = &c; .C字符串指针: 可以把字符串当作一个整体进行操作第五十张,PPT共六十八页,创作于2022年6月51 .指针变量与函数关联使用 .指针变量作函数参数: 可改变实参指针所指变量的值 void swap(int *px,int

40、 *py) int t; t = *px;*px = *py;*py = t; 则 int a = 3, b = 5; int *pa = &a,*pb = &b; swap(pa,pb);/swap(&a,&b); 调用后a和b的值各是多少?void swap(int x,int y) int t; t = x; x = y; y = t;则 int a = 3, b = 5; swap(a,b); 调用后a与b的值各为多少?35ab35形参变量x形参变量y35ab&a&bpapb&a形参指针px&b形参指针py第五十一张,PPT共六十八页,创作于2022年6月52 .函数返回指针 例: c

41、har *menu=error,File,Edit,Search,Help; char *menuItem(int m) return (m4)?menu0:menum; *注意:返回的指针必须是有意义的,不能是一个指向函数内的局部变量或参数变量的指针或处于“悬空”状态的指针 .函数指针 .函数名代表函数的入口地址,也称做函数的指针 .可定义一指针变量,将函数的入口地址存入该指针变量中,通过该指针变量调用函数 .一般做函数的参数第五十二张,PPT共六十八页,创作于2022年6月53二.动态分配内存 .两个运算符:new 与 delete .new用来动态生成一个指定类型的无名变量,并返回该变量

42、的地址,只能通过该地址(指针)访问动态生成的变量 .动态生成变量:int *pi;pi = new int;*pi = 100; .生成变量并初始化:int *pi = new int(5); .动态生成一个数组: int n; /通过某种运算得到n的值 int *pi = new intn; /此时数组长度可以是变量 .delete释放new动态生成的变量 .释放动态生成的变量: delete pi; .释放动态生成的数组: delete pi; 例:动态内存分配 注意:.new动态生成的变量不会自己撤消,所以该变量不用时,必须及时用delete将其释放 .new与delete比C中的函数m

43、alloc和free完善,所以C+中不建议使用malloc和free动态申请与释放内存第五十三张,PPT共六十八页,创作于2022年6月54三.引用 .引用即变量的别名,对引用的操作就是对目标变量的操作 .声明引用的一般形式: 类型名 & 引用名 = 目标变量名; 例: int nSomeVar; int &ref = nSomeVar; .引用不是变量,不占存储空间,故只能声明,没有定义 .由于引用不是变量,故不能声明引用的引用和指向引用的指针 .引用不做函数形参时,声明引用的同时必须对其初始化 .引用一旦初始化,就维系在其目标变量上,再也不分开, 对该引用的任何操作,都是对引用维系的目标变

44、量的操作,因此对引用的赋值就是对目标变量的赋值,而不是重新引用例: int nSomeVar = 0; int nOther = 10; int & ref = nSomeVar; ref = nOther; /等价于 nSomeVar = nOther,而不 /是让ref成为nOther的引用第五十四张,PPT共六十八页,创作于2022年6月55 引用的作用 .给变量一个别名,通过别名实现对目标变量的操作 .做函数形参:此时形参是实参的引用 例:void swap(int &x,int &y) int t; t = x; x = y; y = t; 则int a = 3,b = 5; swa

45、p(a,b);调用后a和b的值分别是多少? .引用做函数参数的特点 .引用做函数形参,实参一般使用变量而不使用常量或表达式 .可改变实参的值,若不需改变实参的值时可在形参引用前加上关键字const,则由编译器保证不会无意中修改实参值 .可以使函数带回多个值 .可以减少函数调用过程中的开销 .比指针简洁方便,易使用,好理解35axby第五十五张,PPT共六十八页,创作于2022年6月568 函数与函数重载函数的定义与声明定义: 属性说明 返回值类型 函数名(形参列表)函数体 其中的属性说明可以是以下几个关键字之一: .inline .static .virtual .friend .extern

46、: C+中函数的缺省属性就是extern函数的声明:使用函数原型进行声明 属性说明 返回值类型 函数名(形参列表);*注意: 程序中对函数的调用出现在函数的定义之前时,调用之前必须进行声明函数进行声明时形参只出现类型即可,可以不使用形参名函数的声明与定义中返回值的类型必须一致,参数的类型、数目必须相符一.函数第五十六张,PPT共六十八页,创作于2022年6月57 函数的使用: 对函数进行调用 形式: 函数名(实参列表); 例 : swap(a,b); .函数调用过程中的参数传递 .值传递 .指针传递: 仍为值传递,传递的是地址值 .引用传递:形参是实参的别名,完全代表了实参第五十七张,PPT共

47、六十八页,创作于2022年6月58 函数的属性 .extern(外部)函数: C+中函数缺省的属性就是外部的 例: extern int func( ) 则函数func( )的作用范围不仅仅局限于定义它的文件中,在其它文件中可以通过使用:extern int func()对其进行声明,从而在第二个文件中可以调用在第一个文件中定义的func()函数 .因C+中函数的缺省属性就是extern的,所以定义和声明函数时通常省略关键字extern .static(静态)函数 例: static int func( ) static关键字限制函数func( )的作用范围仅在定义它的文件中,其它文件中不可能

48、通过声明的方式对该函数进行调用,即使进行了声明也无济于事第五十八张,PPT共六十八页,创作于2022年6月59 .inline(内联)函数 .定义或声明函数时,在返回值类型前使用关键字inline进行修饰的函数 例:inline int add(int x,int y)return x+y; .内联函数不被编译为单独一段可执行代码,而是把函数的可执行代码直接插入到对该函数的每一次调用处,所以没有函数调用过程中的开销,可以提高程序的效率 .与带参的宏相似,但因为函数的参数带有类型信息,所以比宏安全例:inline int max(int x,int y) return xy?x:y; void main() int a,b; cin a b; cout max(a,b) endl; 第五十九张,PPT共六十八页,创作于2022年6月60例:内联函数*注意 .若inline不在函数名第一次出现时指定,则编译器把该函数做为普通函数对待 .内联函数的函数体应尽可能简洁,否则会增加程序的体积 .内联函数中不能包含复杂的流程控制语句,否则inline关键字将不会起作用,该函数将成为普通函数 .inline函数不能递归,也不能

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论