![2022年C++知识点_第1页](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/d37c1e3a-6230-4ec0-825b-5b6d7fe7db3f/d37c1e3a-6230-4ec0-825b-5b6d7fe7db3f1.gif)
![2022年C++知识点_第2页](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/d37c1e3a-6230-4ec0-825b-5b6d7fe7db3f/d37c1e3a-6230-4ec0-825b-5b6d7fe7db3f2.gif)
![2022年C++知识点_第3页](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/d37c1e3a-6230-4ec0-825b-5b6d7fe7db3f/d37c1e3a-6230-4ec0-825b-5b6d7fe7db3f3.gif)
![2022年C++知识点_第4页](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/d37c1e3a-6230-4ec0-825b-5b6d7fe7db3f/d37c1e3a-6230-4ec0-825b-5b6d7fe7db3f4.gif)
![2022年C++知识点_第5页](http://file2.renrendoc.com/fileroot_temp3/2021-11/22/d37c1e3a-6230-4ec0-825b-5b6d7fe7db3f/d37c1e3a-6230-4ec0-825b-5b6d7fe7db3f5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、c+标识符的命名规则1. 所有标识符必须由一个字母(az 或 az) 或下划线 (_)开头;2. 标识符的其它部分可以用字母、下划线或数字(09) 组成;3. 大小写字母表示不同意义, 即代表不同的标识符,如前面的cout 和 cout;二、如何正确地声明变量及其初始化2. c+中变量定义的格式 : 类型名 变量名 1,变量名 2,变量名 n ; 如:int num1, num2; (2.1)在 c+中,每个变量在使用前必须被定义,以便编译器检查变量使用的合法性。变量定义只是给变量分配相应的空间。(2.2)c+允许在定义变量的同时给变量赋初值。变量未被赋值前,值为未知格式: 类型名 变量名
2、 = 初值;或者:类型名变量名(初值);如: int count = 0; 或 int count(0); 都是定义整型变量count ,并为它赋初值0。可以给被定义的变量中的一部分变量赋初值,如:int sum = 0, count = 0, num; (2.3)一旦定义了一个变量,可以将一个常量赋给该变量。变量赋值过程是“ 覆盖”过程,用新值去替换旧值如 int a; a=123; 或 a = 0 x123; 都是正确的(2.4)在 c+中, 定义变量时没有赋初值,然后直接引用该变量是危险的!3. 数据类型 (data type) :数据的编码方式、值域和可执行的操作。数据类型包括两个方面
3、:数据的取值范围、可用的操作。c/c+中的数据类型分为两大类:基本数据类型:整型、浮点型、字符型和布尔型构造数据类型:字符串、数组、结构、联合和枚举(3.1)整型 (int) :以补码形式存储。基本型 int ;长整型 long: long / long int (3.1.1)整数运算时要注意数据的表示范围。如整数用两个字节表示,正整数 32767 加 1 的结果为 -32768 。这称为整数运算的溢出,系统不检查这样的错误,程序员必须自己保证程序中不出现这样的错误。(3.1.2)在某些应用中,不可能出现负数,则整型数中有一半的数值范围是被浪费的。因此在 c/c+中可以将所有的数都看成正整数,
4、称为无符号数。无 符 号 数 的 定 义 : 在 各 种 整 数 类 型 前 加 上 关 键 词unsigned , 变 成unsigned int, unsigned short, unsigned long (3.2) 实型:以浮点表示,操作类似于整型,浮点数无法精确表示。(3.2.1)浮点类型的分类:单精度 float ;双精度 double (3.3)字符型( char) :存放一个字母或符号,占一个字节,存放的是字符的内码。可执行比较、连接等运算。具有双重属性:整数属性和字符属性,整数属性:字符类型即单字节的整数类,字符属性:数据值即为相应字符的 ascii 码。字符类型名: cha
5、r。可分为可打印字符:小写字母、大写字母、数字、标点符号、空格等;非打印字符:换行和报警字符或响铃等控制字符( 3.4 ) 布 尔 型 (bool) :只 有 “ 真 ” 、 “ 假 ” 两 个 值 。 可 执 行 判 断 运 算 。如 bool flag=true; (3.5)字符串( string ) :是类类型,用双引号“ ” 表示,可执行字符串比较,连接应用时要加 #include 如 string str= “ dfhdsf ” ; 精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 1 页,共 18 页 - - - - - - - - -精品
6、学习资料 可选择p d f - - - - - - - - - - - - - - 第 1 页,共 18 页 - - - - - - - - -三、如何声明常量4.常量:值的直接表示。如1、3、1.57、“ a? 等,又称直接量。(4.1) 整型常量可用十进制、八进制和十六进制表示:如十进制: 123, -234;八进制: 0123 十六进制: 0 x123, 0 x3a2f (4.2)浮点数常量有两种表示法:(1)十进制表示: 1.23 , 3.14;(2)科学计数法:尾数e 指数 123e2=12300 2.25e-3=0.00225 ; 注意:尾数不能为空,指数必须为整数(4.3)字符常
7、量: ” a? , “ s? , ” 2? 等用一对单引号括起来的数据。字符串常量用双引号(4.4)命名常量:为值指定一个描述性的文字,增加程序的可读性。在 c+语言中,用 const 修饰,如 const double pi =3.14; 见 pi即知 3.14。注意一般变量名需大写,如pi。二、算术运算符号及其运行规则a)整数除整数b)% 求模运算5.算术运算符: +(加) -(减) *(乘) / (求商) %(求余)(5.1)“ -” 可为二元运算符,也可为一元运算符,其余所有的算术运算符都是二元运算符。(5.2)优先级:高 * / %, 低 + - (5.3)整型与整型数运算,结果为整
8、型,如5 / 2 = 2 ;整型与浮点数运算,结果为浮点数,如5 / 2.0 = 2.5 ;字符与整型数运算,结果为整型;字符与浮点数运算,结果为浮点数。浮点数与浮点数运算,结果为浮点数。“ %” 运算符:取余,其两边都必须是整型数。6.关系运算符: , =, =, =, , != (6.1) 优先级:高于赋值运算符,低于算术运算符。关系运算符内部:=和 !=较低(6.2)关系表达式:用关系运算符将二个表达式连接起来称为关系表达式。关系表达式的结果是 true 或 false。“ 等于 ” 运算符是由两个等号组成。常见的错误是在比较相等时用一个等号。=(相等 ),=(赋值)7. 逻辑运算符 :
9、& (and) | (or) ! (not) (7.1)优先级: ! 高于 关系运算符 高于 & 高于| (7.2)逻辑表达式:由逻辑运算符连接起来的表达式,其结果为 “ 真 (true) ” 或 “ 假(false) ” 逻辑表达式在执行时,先处理左边。如左边已能决定此逻辑表达式的结果,则右边不执行。因此,在& 逻辑表达式中,应把false 可能性较大的条件放在左边,在 |表达式中,应把true 可能性较大的条件放在左边,这样可以减少程序执行的时间8赋值运算符: = 的优先级比算术运算符低(8.1)赋值语句:把一个值赋给一个变量。如x = y + z; x = 3.1
10、4; 赋值语句的左边是变量,右边是表达式。(8.2)赋值表达式格式: = 如 x = x + 2。作用:将右边的表达式的值存入左边的变量,整个表达式的值是右边的表达式的结果。 赋值运算符是右结合的(8.3)左值 (lvalue) : 在 c+中,能出现在赋值运算符左边的表达式称为左值右值( rvalue ) :赋值运算符右边的表达式的值(8.4)赋值语句:赋值表达式后面加上分号。精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 2 页,共 18 页 - - - - - - - - -精品学习资料 可选择p d f - - - - - - - - - -
11、 - - - - 第 2 页,共 18 页 - - - - - - - - -(8.5)将赋值表达式作为更大的表达式的一部分。如: a = (x = 6) + (y = 7) 等价于分别将 x 和 y 的值设为 6 和 7,并将 6 和 7 相加,结果存于变量a (8.6)其他运算符与赋值运算符结合的运算符称为复合赋值运算符。格式:变量 op= 表达式 ; 等价于:变量 = 变量 op 表达式 ; 常用的复合赋值运算符有:+=,=,*=,/=,%= 如: balance += deposit; balance -= surcharge; x /= 10; salary *=2; (8.7)赋值
12、和运算时的自动类型转换,在进行赋值操作时,会发生类型转换,将取范围小的类型转为取值范围大的类型是安全的反之是不安全的,如果大类型的值在小类型能容纳的范围之内,则平安无事强制类型转换: (类型名)(表达式);或类型名(表达式);如 z = (double)x / y; 静态转换 (static_cast):用于编译器隐式执行的任何类型转换格式:转换类型 (表达式 ) 如 z = static_cast(x) / y; 1. 单个分号组成的语句成为空语句2. 用 括起来的一组语句称为复合语句。在逻辑上看成一个语句。 v 复合语句可以放在任何单语句出现的地方。3. 在复合语句中可以定义变量,但必须定
13、义在最前面。4. 逗号表达式语句格式:表达式1,表达式 2,,表达式 n v 逗 号运 算 符 的 优 先级 是 所有 运算 符 中最 低 的 如 a 的 初 值 为 0 , 则表 达式 a += 1, a += 2, a += 3, a += 4, a += 5的结果为 15 5. 前置 +i, -i (先执行 i+1 或 i-1,再使用 i 值)6.后置 i+, i- (先使用 i 值,再执行 i+1 或 i-1)if 语句c) 形式d) 三种 if 语句的执行流程9. 控制语句 : 改变程序中语句的执行次序。 (9.1)if 语句: 两个分支:条件测试为true 时所执行的程序块叫做th
14、en 子句,条件为false 时执行的语句叫做else 子句。格式( 1 ) if (条件测试)语句;即 else 语句可省略格式(2) if (条件测试)语句 1; else 语句 2; eg. if (grade = 60) cout = 60) cout “ passed” ; else cout = 90) cout = 80) cout = 70) cout = 60) cout “ d” ; else cout ” e” ; 精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 3 页,共 18 页 - - - - - - - - -精品学习资
15、料 可选择p d f - - - - - - - - - - - - - - 第 3 页,共 18 页 - - - - - - - - -(9.2)条件语句使用注意 条件的结果值应该是 true 或 false,它们是 c+中 bool 类型的值 条件可为任意表达式,不一定是关系表达式。0 为 false,非 0 为 true 。 if 语句可以没有else 子句。合理的缩排。 if 语句的 then 子句和 else 子句含有 if 语句,称为 if 语句的嵌套。 eg if (x 100) if (x 90) 语句 1;else if (x80) 语句 2;else 语句 3;else 语
16、句 4; 歧义性:如最后一个else 跟哪个 if 配对.。 eg if (y != 0) if (x != 0) result = x / y; else cout “ error :y = 0 ” y ? x :y; 循环语句e)形式f)三种循环语句的区别g)三种循环语句的执行流程10.循环语句:一个完整的循环结构一般由四部分组成:(10.1)for 语句 :主要用于计数循环v 格式: for(表达式 1;表达式 2;表达式 3) 语句; or语句快 ;可以理解为 :for( 循环变量赋初值;循环条件;循环变量增值) 符合循环条件时的执行语句v 循环体可以是复合语句或空语句。v 循环里所有
17、语句的一次完全执行称为一个循环周期。v 执行过程:先执行表达式1,再执行判断表达式2,如果为true,执行一次循环体(即一个循环周期) ,接着执行表达式3,然后重新执行判断表达式2,若为true,又执行一次循环体,重复直至判断表达式2 为 false,,最后跳出整个循环。若开始执行条件表示2 为 false, 循环体一次也不执行。v for 循环的三个表达式可以是任意表达式。三个表达式都是可选的。v 如果循环不需要任何初始化工作,则表达式1 可以缺省。如循环前需要做多个初始化工作,可以将多个初始化工作组合成一个逗号表达式,作为表达式1。如 for (int i=0,; i=10; +i) ;
18、精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 4 页,共 18 页 - - - - - - - - -精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 4 页,共 18 页 - - - - - - - - -v 表达式2 也不一定是关系表达式。它可以是逻辑表达式,甚至可以是算术表达式。当表达式 2 是算术表达式时,只要表达式的值为非0,就执行循环体,表达式的值为 0 时退出循环。v 如果表达式2 省略,即不判断循环条件,循环将无终止地进行下去。无终止的循环称为“ 死循环 ” ,最简单的死循环是 for (
19、;); (10.2)while 语句: 与 for 循环等价,可相互代替。v 格式: while (表达式)语句; or 语句块; v 执行过程:先计算出条件表达式的值。如果是false,循环终止;如果是true ,整个循环体将被执行,而后又回到while语句的第一行,再次对条件进行检查,若为true,接着执行循环体,重复直到条件为false,,跳出整个循环。v 用途:用于循环次数不定的循环。循环是否结束取决于某一个变量的值(标记控制重复)v 在 for 和 while 语句之后一般没有分号,有分号表示循环体就是分号之前的内容(空循环体)(10.3) do- while 语句v 格式: do
20、语句; or 语句块; while ( 表达式 );v 执行过程:首先执行语句,然后判断表达式的值。如果表达式为0,继续向下执行,否则,再次执行语句,再次判断表达式的值v 用途:用于至少执行一次的循环。注意后面有分号;11 跳转语句:v break 语句:跳出整个循环或switch 语句。若有多重循环,跳出含break 最近的循环体。v continue 语句 :跳出当前本次循环,接着判断是否执行下次循环周期。12 几种典型的循环。注意格式及应用v 输入验证循环:以下两种等价,右边一个常用cout 请输入半径 :; / 提示输入 do cout radius; area = pi * radi
21、us * radius while ( radius 0) ;/ 当 radius 0 2.while(true) / 或 while (1) for ( ) cout num; if (num = -1) break; / if (num=标志) 跳出 ; sum += num; / 处理数据 v 查询循环精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 5 页,共 18 页 - - - - - - - - -精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 5 页,共 18 页 - - - - - - -
22、- -累加循环 p=0; char ans; / 用于用户响应for(int i=1;i=n;i+) cout radius; area = pi * radius * radius 累乘循环 : p=1 cout area = area endl; for(int i=1;i=n;i+) cout do you again?ans; / 询问输入 while(ans = y| ans = y); /询问循环v 编译( compiler ) :将高级语言的程序翻译成机器语言,分为解释执行,编译执行v 连接 (link) :将目标程序与已有的其它目标程序连接起来,产生一个可执行的程序v 输出流是
23、传给显示器的数据流,将变量或表达式的内容显示在显示器上格式? 输出一个变量的值:cout a;? 输出多个变量的值:cout a b c;? 输出表达式的结果:cout “ hello worldn” endl ? 上述情况的组合: cout a “ +” b “ =” a+b 变量 1 变量 2 变量 n; 如 cin a; 当程序执行到cin时会停下来等待用户的输入,后面一定是变量名,不可加引号用户可以输入数据,用回车( )结束。当有多个输入数据时,一般用空白字符(空格、制表符和回车)分隔。如:a 为整型,d 为 double ,则对应于cin a d,用户的输入可以为 12 13.2 o
24、r 12(tab 键)13.2 or 12 13.2如何定义一个带默认值参数的函数如何调用一个带默认值参数的函数h)参数使用默认值i)参数不使用默认值函数v 过程单元是程序的基本单位。在过程化的语言中,过程单元就是程序中某个模块的表示。在面向对象的语言中,过程单元说明对象对各种事件是如何响应的。v 每个程序都必须有一个名为main的函数,它是程序的入口。主程序由一个或多个函数组成v 程序主体(主函数main () ) :主要包含如下模块:(definition input-proocess-ouput) (1)变量定义:为程序中的数据准备存储空间 ( declaration or defini
25、tion) (2)输入阶段:接受所需输入的信息。它由两部分组成:显示提示信息和接收输入(input) 精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 6 页,共 18 页 - - - - - - - - -精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 6 页,共 18 页 - - - - - - - - -(3)计算阶段:完成所需的计算(process) (4)输出阶段:输出计算的结果(output) v 函数的主要构成:函数声明,函数定义,函数调用v 可以把函数想象成数学中的函数。如f(x)=2x 参数
26、表是一组自变量x,返回类型是函数值的类型 ; 函数声明就是设函数为f(x), 函数定义(函数头+函数体)就是函数表达式如 2x,函数调用就是带值计算如f(2)=2 2 。v 函数声明:类似于变量声明,所有函数在使用前必须被声明。又称函数的原型,功能:说明函数和外界的交流,反映函数调用的全部信息。包括下列内容:函数名,函数的参数类型,函数的返回类型它的形式为:返回类型函数名(参数表);返回类型:是函数的输出值的类型, void 函数没有返回值函数名:是函数的名字。程序可以通过函数名执行函数体的语句参数表:是函数的输入, 无参数列表,可不写,但是括号必须有。参数表中的参数说明之间用 “ ,” 分开
27、,每个参数说明可以是类型,也可以是类型后面再接一个参数名。如: int max(int, int); int max(int a, int b); int main( ) v 函数定义:函数头+函数体,相当于一个小程序。函数头:说明函数和外界的交流,与函数声明一样,参数表要有形参,void除外 函数体: 一系列独立的程序步骤;,必须定义在函数体最前面形式:返回类型函数名(参数表) / 函数头 code here; / 函数体 eg : int max(int a, int b) / 函数定义 if (a b) return(a); else return(b); v 函数调用形式: 函数名(实
28、际参数表);一般出现在主调函数中或其他调用函数中。 eg. max( x ,y);v 函数执行过程:(1) 在主程序中计算每个实际参数值。(2) 调用时将实际参数的值赋给对应的形式参数。在赋值的过程中完成自动类型转换。(3) 进入函数体依次执行函数体的每个语句,直到遇见return 语句或函数体结束(4) 计算 return 后面的表达式的值,如果表达式的值与函数的返回类型不一致,则完成类型的转换。(5) 用函数的返回值置换函数,继续主程序的执行。 eg int max(int a, int b); /函数声明int main( ) int x, y ;cin x y; cout b) ret
29、urn(a); else return(b); v 注意:(1) 形式参数和实际参数的个数(number) 、排列次序 (order) 、类型 (type) 要完全相同。 (2) 实际参数可以是常量、变量、表达式,甚至是另一个函数调用(3) 传递方式:值传递,执行函数调用时,将实参值传递给形参,并替换形参同名的实体精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 7 页,共 18 页 - - - - - - - - -精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 7 页,共 18 页 - - - - - -
30、 - - -(4) 值传递:函数获得了主调程序参数变量值的拷贝。被调程序可以改变这些拷贝,但这对主调程序的环境没有影响。(5)请注意: c+中不允许函数定义嵌套,即在函数定义中再定义一个函数是非法的。一个函数只能定义在别的函数的外部,函数定义之间都是平行的,互相独立的 。例 如 : 下 面 的 代 码 在 主 函 数 中 非 法 嵌 套 了 一 个f ( ) 函 数 定义: void main() void f() / 函数参数的传递比较:1. 按值传递以按值传递方式进行参数传递的过程为:首先计算出实参表达式的值,接着给对应的形参变量分配一个存储空间,该空间的大小等于该形参类型的长度,然后把已
31、求出的实参表达式的值一一存入到为形参变量分配的存储空间中,成为形参变量的初值,供被调用函数执行时使用。这种传递是把实参表达式的值传送给对应的形参变量,故称这种传递方式为“ 按值传递 ” 。这种方式被调用函数本身不对(主调函数中)实参进行操作,也就是说,即使形参的值在函数中发生了变化(主调函数中)实参的值也完全不会受到影响,仍为调用前的值。例:按值传递。void swap(int,int);/函数定义 void main() int a=3,b=4; couta=a,b= “ bendl; swap(a,b); / 函数调用 couta=a,b= b endl; void swap(int x,
32、int y)/函数定义 int t=x; x=y; y=t; 此程序的运行结果为:a=3,b=4 a=3,b=4 2. 地址传递如果在函数定义时将形参的类型说明成指针,对这样的函数进行调用时就需要指定地址值形式的实参。这时的参数传递方式即为地址传递方式。这种地址传递与上述的按值传递不同,它把实参的存储地址传送给对应的形参,从而使得形参指针和实参指针指向同一个地址。因此,被调用函数中对形参指针所指向的地址中内容的任何改变都会影响到实参。例:地址传递。void swap(int *x ,int *y);/函数声明 void main() int a=3,b=4; couta=a,b= “ bend
33、l; swap(&a,&b); 、 couta=a,b= “ bendl; void swap(int *x,int *y) int t=*x; *x=*y; *y=t; 此程序的运行结果为:a=3,b=4 a=4,b=3 3. 引用传递 按值传递方式容易理解,但形参值的改变不能对实参产生影响;地址传递方式虽然可以使得形参的改变对相应的实参有效,但如果在函数中反复利用指针进行间接访问,会使程序容易产生错误且难以阅读。如果以引用作为参数,则既可以使得对形参的任何操作都能改变相应的实参的数据,又使函数调用显得方便、自然。引用传递方式是在函数定义时在形参前面加上引用运算符“ &
34、;” 。 例引用传递。void swap(int &,int &); void main() int a=3,b=4; couta=a,b= “ bendl; swap(a,b); couta=a,b= “ bendl; 精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 8 页,共 18 页 - - - - - - - - -精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 8 页,共 18 页 - - - - - - - - -void swap(int &x,int &y)
35、int t=x; x=y; y=t; 此程序的运行结果为:a=3,b=4 a=4,b=3 函数的嵌套调用:函数体 由前述可知, c+函数不能嵌套定义,即一个函数不能在另一个函数体中进行定义。但在使用时,允许嵌套调用,即在调用一个函数的过程中又调用另一个函数。 例如: func1(int a, float b) float c; c=func2(b-1,b+1);/嵌套调用 ,func1 调用 func2 int func2(float x, float y) /函数体 /func1和 func2 是分别独立定义的函数,互不从属。如何定义一个递归函数j)汉诺塔k)求最大公约数l)计算阶乘函数的递
36、归调用:一个函数直接或间接地调用自身,这种现象就是函数的递归调用。递归调用有两种方式:直接递归调用和间接递归调用。直接递归调用即在一个函数中调用自身,间接递归调用即在一个函数中调用了其他函数,而在该其他函数中又调用了本函数。利用函数的递归调用,可将一个复杂问题分解为一个相对简单且可直接求解的子问题( “ 递推 ” 阶段) ;然后将这个子问题的结果逐层进行回代求值,最终求得原来复 杂问 题 的 解 ( “ 回 归 ” 阶 段 ) 。例 : 求 n的 阶 乘 。 ( 函 数 递 归 调 用 的 例程。) long f(int n) if(n0) cout “ error! “ endl; retu
37、rn(-1); else if(n=1) return(1); else return (n*f(n-1);/自己调用自己 void main() long f(int n); int n; coutinput n: n; coutn!=f(n) s2 返回值为正数, s1=s1 返回值为 0,s1s2 返回值为负数strncmp(s1, s2, n) 如 strcmp,但至多比较n 个字符 strchr(s, ch) 返回一个指向s 中第一次出现ch 的地址 strrchr(s, ch) 返回一个指向s 中最后一次出现ch 的地址 strstr(s1, s2) 返回一个指向s1 中第一次出现
38、 s2 的地址如何定义一个函数q)函数返回类型r)函数名s)参数列表i.一维数组作为参数,该如何处理?ii.二维数组作为参数,该如何处理?t)return 语句精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 12 页,共 18 页 - - - - - - - - -精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 12 页,共 18 页 - - - - - - - - -数组作为函数的参数小结: v 可以将数组元素传递给函数,这时实际参数用的是数组元素函数调用判断是否为素数 isprime(ai); 函数定义
39、 bool isprime (ai); v 也可以将整个数组传递给函数,这时实际参数用的是数组名。如 函数调用sort(a,n); 函数定义 sort(int a, int n); v 数组传递的实质是传递地址。把实际参数中的数组首地址作为形式参数中的数组的首地址 v v 数组在函数中的定义:函数原型应该体现数组参数是一个数组,所以用无数组大小定义的方括号表示数组。你可能希望规定数组的大小,但在c+语言中并不检查数组的界限,所以在函数中也没必要知道数组的大小。数组大小只在数组定义中明确(为了申请内存量) 。v 数组的每一个元素又是数组的数组称为多维数组v 最常用的多维数组是二维数组,又称为矩阵
40、v 二维数组的定义格式:类型说明数组名 常量表达式 1 常量表达式 2 v 存放次序:按行存放 int a45; v vector类模板是一种更加健壮, 且有许多附加功能的数组 v 附加功能例如 : 提供下标越界检查 ; 提供数组用相等运算和大小比较提供数组间赋值等运算指针u)利用指针移动(指针加法、减法运算),处理数组中的不同元素。v)利用 new/delete 处理一维动态数组指针与引用v 指针就是把地址作为数据,可以把地址存储在内存中 v 指针变量:存储地址的变量v 变量的指针:当一个变量存储另一个变量的地址时,那我们说它就是那个变量的指针 v 如何定义一个变量是指针?类型标识符 *指针
41、变量;如:int *intp; double *doublep v 如何把某一变量的地址置入一个指针变量中?因为我们不知道系统分配给变量的真正地址是什么。 ? 用地址运算符 “ &” 解决。如表达式“ &x” 返回的是变量 x 的地址。如:intp = &x; ? & 运 算 符 后 面 不 能 跟 常 量 或 表 达 式 。 如 &2 是 没 有 意 义 的 ,&(m * n + p ) 。也是没有意义的v 如何用指针变量处理和改变它所指向的单元的值? ? 用引用运算符 “ *” 解决。如 *intp 表示的是 intp 指向的这个单元的内容。
42、 ? 在对 intp 使用引用运算之前,必须先对 intp 赋值如有: int x, *intp, y;x=3;y=4 intp=&x; 注意:不能用 int p=100; 因为我们永远不知道变量存储的真实地址,而且程序每次运行可能都不同。精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 13 页,共 18 页 - - - - - - - - -精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 13 页,共 18 页 - - - - - - - - -v 指针变量可以指向不同的变量。如上例中intp 指
43、向 x,我们可以通过对intp 的重新赋值改变指针的指向。如果想让intp指向 y,只要执行intp=&y就可以了。这时,intp 与 x 无任何关系。v 同类的指针变量之间可相互赋值,表示二个指针指向同一内存空间。v 空指针 ? 指针没有指向任何空间 ? 空指针用常量null 表示, null 的值一般赋为0 ? 不能引用空指针指向的值v 指针在使用前必须初始化。v 仅和别的变量一样定义指针,不初始化是一个比较普通的错误。v 没有初始化的指针可能指向任意地址,对这些指针作操作可能会导致程序错误。v null 是一个特殊指针值,称为空指针。它的值为0。它可被用来初始化一个指针,表示不指
44、向任何地址。v 指向数组元素的指针 ? 数 组 元 素 是 一 个 独 立 的 变 量 , 因 此 可 以 有 指 针 指 向 它 。 如 :p = &a1, p = &ai ? 数组元素的地址是通过数组首地址计算的。如数组的首地址是 1000,则第 i 个元素的地址是1000 + i * 每个数组元素所占的空间长度v 数组名可以看成是常量指针,对一维数组来说,数组名是数组的起始地址,也就是第 0 个元素的地址v 如执行了p=array ,则 *p 与 array0 是等价的,对该指针可以进行任何有关数组下标的操作例如:有定义 int a10, *p 并且执行了 p=a,那么可
45、用下列语句访问数组a 的元素for ( i=0; i10; +i ) cout pi; for ( i=0; i10; +i ) cout *p+; for ( i=0; i10; +i ) cout *(p+i); for ( i=0; i10; +i ) cout *(a+i); 指针可以进行各种算术运算,但仅有加减运算是有意义的。指针运算与数组有密切的关系 v 虽然通过指针可以访问数组,但两者本质是不同的。在定义数组时为数组的各个元素分配了全部的存储区,而在定义指针时,仅仅分配四个字节的存储区存放指针地址。只有把一个数组名付给了对应的指针后,指针才能当作数组使用用指针作为参数可以在函数中
46、修改主调程序的变量值,即实现变量传递。但必须小心使用!swap(int *a, int *b)/定义swap(&x, &y)/调用int c; c=*a; *a= *b; *b=c; 精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 14 页,共 18 页 - - - - - - - - -精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 14 页,共 18 页 - - - - - - - - - 指针作为输出参数,输入数据包含调用函数的数据副本;输出参数为指向实参的指针,结果以间接赋值的方式存
47、储到调用函数的数据区,无需return. v 数组传递的本质是地址传递,因此形参和实参用数组名和指针是一样的。 ? 数组传递是函数原型可写为: int fun(int a, int size); 也可写为 type fun(int *p, int size); 但在函数内部, a 和 p 都能当作数组使用 ? 调用时,对这两种形式都可用数组名或指针v 建议:如果传递的是数组,用第一种形式;如果传递的是普通的指针,用第二种形式v 函数的返回值可以是一个指针v 返回指针的函数原型:类型 *函数名(形式参数表) ;v 当函数的返回值是指针时,返回地址对应的变量不能是局部变量。v 引用的定义:给一个变
48、量取一个别名。例:int i; int &j=i; j 是 i 的别名, i 与 j 是同一个内存单元。?引用实际上是一种隐式指针。每次使用引用变量时,可以不用书写间接引用运算符“ *” ,因而引用简化了程序。v c+引入引用的主要目的是将引用作为函数的参数。v 定义引用时必须立即对它初始化,不能定义完成后再赋值。如: int i; int &j; / 错误 j=i; v 为引用提供的初始值可以是一个变量或另一个引用。如: int i=5; int &j1=i; int &j2=j1; v 引用不可重新赋值,不可使其作为另一变量的别名,而指针可以指向另一个变量。
49、 int i, k; int &j=i; j=&k;/ 错误v 引用不同于普通变量,下面的类型说明都是非法的。 int &a3;/不能建立引用数组 int &*p;/ 不能建立指向引用的指针 int &r;/不能建立引用的引用v 中由 new 和 delete 两个运算符替代- 运算符 new 用于进行内存分配: p = new type; p = new typesize;/分配数组精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 15 页,共 18 页 - - - - - - - - -精品学习资料 可选择p d f - - - - - - - - - - - - - - 第 15 页,共 18 页 - - - - - - -
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 绿化种植养护合同范本
- 北京市软件产品加盟合同范本
- 剪纸手工活合作合同范本
- 公寓合租合同模板大全
- 吉林省2024-2025学年高二上学期11月期中考试生物试题(解析版)
- 特殊车辆租赁合同范本一览
- 社区环境整治与垃圾分类的长效机制
- 某集团品牌销售策略与模式分析
- 用户体验设计的未来趋势与挑战分析
- 癌症治疗突破
- 非车险-企财险
- 智慧车站方案提供智能化的车站管理和服务
- 路面弯沉温度修正系数
- 写给所有人的数学思维课
- 黑龙江省哈尔滨重点中学2023-2024学年高二上学期期中考试语文试题(含答案)
- 读书分享读书交流会《给教师的建议》课件
- 工程量清单及招标控制价编制、审核入库类服务方案
- 语文教师公开课评价表
- toc测定仪的原理及使用(ppt页)
- 委托办理公证委托书(6篇)
- 康复医学绪论
评论
0/150
提交评论