C++与C语言的不同

上传人:飞*** 文档编号:54654291 上传时间:2018-09-16 格式:PPT 页数:85 大小:661KB
返回 下载 相关 举报
C++与C语言的不同_第1页
第1页 / 共85页
C++与C语言的不同_第2页
第2页 / 共85页
C++与C语言的不同_第3页
第3页 / 共85页
C++与C语言的不同_第4页
第4页 / 共85页
C++与C语言的不同_第5页
第5页 / 共85页
点击查看更多>>
资源描述

《C++与C语言的不同》由会员分享,可在线阅读,更多相关《C++与C语言的不同(85页珍藏版)》请在金锄头文库上搜索。

1、第2章 C+与C语言的不同,2.1 C+语言的输入和输出 2.2 注解 2.3 动态存储分配和释放存储空间 2.4 内联函数 2.5 const说明符 2.6 函数原形 2.7 缺省参数2.8 引用 2.9 枚举名,结构名和联合名都是类型名 2.10 C+语言的类型 2.11 类型转换 2.14 函数体内定义变量的位置,2018年9月16日,2.1 C+语言的输入和输出,C+语言的输入和输出的方法。(1)使用C语言的外部函数(如 printf, scanf等),要包含头文件“stdio.h“,(2)C+语言还提供自己的输入输出方式。是通过“和“变量,2018年9月16日,在输出表达式时,为避免

2、二义性表达式最好加括号 下列程序程序显示一行字符串:#include void main( ) coutinch;coutinch;cout“inches=“;coutinch*2.54; cout“cm“; ,inches= 12 12 inches=30.48cm,还可将上述程序后四句输出改写为 : coutinch“inches=“inch*2.56numpstr;如果输入:120 cheng du则num为120,而pstr仅指向字符串cheng,而不是cheng du。,对于输入符号“,如果需要连续输入多个数据,那么可以有以下两种方法:1) 每行只输入一个数据,以换行符结束一个数据的

3、输入。2)一行输入多个数据,以空格符作为一个数据的输入结束标记;以换行符结束一行数据的输入。,2018年9月16日,2.2 注解,该注解以“/“开始,到行末结束。只能注解单行可以镶嵌。,unm+; /increment num,C的注解风格:,unm+; /*increment num */,使用“/*“开始,直到“*/结束,可以注解但不许镶嵌。,新的注解方法:,2018年9月16日,2.3 动态存储分配和释放存储空间,2.3.1 new和delete,比如要分配100个整型数的存储空间,将起始地址赋给指针变量pint *p;p= (int *) malloc(sizeof(int); fre

4、e(p);,在c语言是利用malloc和free函数完成的。函数原形为:void*malloc(size_t size); /malloc.hvoid*calloc(int n ,size_t size); /malloc.hvoid free(void *p);,2018年9月16日,C+的运算符new和delete提供了动态存储分配和释放存储空间的功能。优点:,1)new自动计算要分配类型的大小,而不给出要分配的存储区的大小,这比较方便,也可以避免偶然地分配错误存储量。,2) 它自动返回正确的指针类型,不必对返回指针进行强制类型转换。,3) 可以用new将分配的存储空间进行初始化。,201

5、8年9月16日,运算符new用于内存分配的使用形式为type *p;p=new type;其中,type是一个数据类名;p是指向该数据类型的指针;new从称为堆的一块空闲内存区中为程序分配一块内存,其大小与type类型的数据一样,该地址被存于指针p中。如果分配失败,new返回一个空指针。,2018年9月16日,运算符delete释放new分配的存储空间,将其交还给堆。它的使用形式一般为delete p:其中 p是一个指针,保存着new分配的内存的首地址。type可以是任何类型,包括函数指针,但不允许函数类型。当type为数组类型时,new返回的指针指向数组的第一个元素,当用new创建多维数时,

6、必须提供所有维的大小。,2018年9月16日,动态分配管理的方法要求delete的操作数必须是一个new返回的指针,对不是new得到的任何其它地址类型,使用delete将产生严重错误。,2018年9月16日,2.3.2 new和delete典型用法1. 动态分配和释放单个数据的存储区语法为type * p;p=new type;delete p;通过*p的方式访问new申请的空间。看下面的例子:,2018年9月16日,该程序把一存储区地址赋给p,该存储区足够容纳一个整数。然后把值20赋给该存储区,并把其内容显示在屏幕上。最后,释放该动态分配的存储区。,#includeint main( )in

7、t *p;p=new int;if(!p), cout“allocation failure n“;return 1; *p=20;cout*p;delete p;return 0; ,例 2-2,2018年9月16日,2 . 用new运算符初始化单个数据区域语法为 type * p;p=new type(); delete p;例2-3 用new运算符初始化单个数据的存储区的例子。,2018年9月16日,#include int main()int *p;p=new int(99); /99 为初始值,初始值可以为常量, 已经/有值的变量,表达式if(!p) cout“allocation

8、failure n“;return 1; cout*p;delete p;return 0;,2018年9月16日,3. 动态分配数组的存储空间(1) 一维数组。 语法为type*p;p=new types;/s 为整数。指定数组中的元素个数,可以是常量或表达式, /不能省略delete p;通过pi的方式访问数组元素。,2018年9月16日,if (!p) cout“allocation failure n“;return 1;for (i=0;i10;i+)pi=100+i;for (i=0;i10;i+)coutpi ;delete p;return 0;,分配一个数组要记住的重要一点是

9、不能对之初始化。,#include int main() float *p;int i;p=new float10;,例2-4 动态分配数组的存储空间的例子。,2018年9月16日,(2)n维数组。语法为:type (*p)常量1常量2常量n-1;p=new types常量1常量2常量n-1;/s 指定数组中的第一维元素,可以是整数的常量.变量或表达式,不能省略delete p;通过pi1i2i3的方式访问数组元素。,2018年9月16日,例如:int (*mat_ptr)1012, (*mat_ptr1)1012, (*mat_ptr2)1012;mat_ptr=new int31012;i

10、nt x=3; mat_ptr1=new intx1012;mat_ptr2=new int3 12; /错误mat_ptr3=new int 1012; /错误数组的第一维可能为变量,但所有后继维必须为常量,每维大小都不能缺省。,2018年9月16日,分配n行3列二维数组的内存空间 int (*p)3; int n=5; p=new intn3;分配n行三维数组的内存空间int (*p)45; int n=5; p=new intn34;,2018年9月16日,要求分配的内存空间均为整数类型。(1) 分配10个元素的一维数组内存空间;(2) 分配 2行3列二维数组的内存空间;(3)分配三维数

11、组的内存空间。各维长度分别为3,4,5;(4)分配5 个长度为3,4,5的三维数组的内存空间。,思考题:,2018年9月16日,2.4 内联函数,C程序员用预处理的宏调来完成简单函数的调用,但宏很受制。例 #define abs(v) (v)0 ? (v):(v) 当调用为abs(+a)时,将不能正常工作!因为在程序中每次遇到宏替换名时,就用所定义的字符串去替换它,那么替换的结果将是: (+a)0? (+a):(+a)得到的是a+2的绝对值,这产生不期望的结果。,2018年9月16日,在函数原型前冠以“inline“表示一个内联函数。例如:inline void function(int a,

12、int b);编译时,在调用function的地方用函数体替换,能够加快代码执行,减少调用开销。使用C+语言,可以上宏定义改写为内联函数:inline long abs(long num)return (numb? a:b ; ,不能修改a的值,2018年9月16日,const可以与指针一起使用,分为三种情况: 1)指向常量的指针2)常指针3)指向常量的常指针,3. 说明指针变量type *pointer;pointer=; /修改指针的值,使该指针指向type类型的其它数据。*pointer=; /通过间接访问方式修改指针指向的数据,2018年9月16日,int a=1,b=2;const int c=3;const int * pi; pi= /错误:修改常量,

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

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

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