嵌入式Linux下C程序设计--02-1数组,指针,引用,内存分配,命名空间.ppt_第1页
嵌入式Linux下C程序设计--02-1数组,指针,引用,内存分配,命名空间.ppt_第2页
嵌入式Linux下C程序设计--02-1数组,指针,引用,内存分配,命名空间.ppt_第3页
嵌入式Linux下C程序设计--02-1数组,指针,引用,内存分配,命名空间.ppt_第4页
嵌入式Linux下C程序设计--02-1数组,指针,引用,内存分配,命名空间.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式Linux下QT程序设计,主讲:成宝宗,2,本章主要内容,数组 指针 引用 指针与数组 指针与引用 动态存储分配 命名空间,3,数组的概念,数组是具有一定顺序关系的若干相同类型变量的集合体,组成数组的变量称为该数组的元素。 数组属于构造类型。,4,一维数组的声明与引用,一维数组的声明 类型说明符 数组名 常量表达式 ; 例如:int a10; 表示 a 为整型数组,有10个元素:a0.a9,数组成员 必须先声明,后使用。 只能逐个引用数组元素,而不能一次引用整个数组 例如:a0=a5+a7-a2*3,数组名的构成方法与一般变量名相同。,5,一维数组的声明与成员引用,#include using namespace std; int main() int a10, b10; for(int i = 0; i 10; i+) ai = i * 2 - 1; b10 - i - 1 = ai; for(int i = 0; i 10; i+) cout “a“ i “ = “ ai “ “; cout “b“ I “ = “ bi endl; return 0; ,一维数组的存储顺序,数组元素在内存中顺次存放,它们的地址是连续的。 例如:具有10个元素的数组 a,在内存中的存放次序如下:,数组名字是数组首元素的内存地址。 数组名是一个常量,不能被赋值。,a,7,一维数组的初始化,可以在定义数组的同时赋给初值: 在声明数组时对数组元素赋以初值。 例如:static int a10=0,1,2,3,4,5,6,7,8,9; 可以只给一部分元素赋初值。 例如:static int a10=0,1,2,3,4; 在对全部数组元素赋初值时,可以不指定数组长度。 例如:static int a=1,2,3,4,5,8,声明 例:int i; int *ptr = 指向整型变量的指针,概念 指针:内存地址,用于 间接访问内存单元 指针变量: 用于存放地址的变量,引用 例1:i = 3; 例2:*ptr = 3;,指针变量的概念,9,指针的声明、赋值与使用,#include using namespace std; int main() int i; /定义int型数i int *ptr = ,10,指针变量的算术运算,指针与整数的加减运算 指针p加上或减去n,其意义是指针当前指向位置的前方或后方第n个数据的地址。 这种运算的结果值取决于指针指向的数据类型。 p1n1等价于*(p1 + n1) 指针加一,减一运算 指向下一个或前一个数据。 例如:y=*px+ 相当于 y=*(px+) (*和+优先级相同,自右向左运算),引用,引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。例如对引用进行输出、赋值等操作。,变量 引用,存储空间,声明引用,引用其实是变量的另一个名字。因此,与变量同样的,在使用引用前也需要对其进行声明,引用的声明语句如下: 类型标识符 /定义引用ra,它是变量a的引用,即别名 声明ra是对整数的引用,初始化为引用a。在这里,要求a已经声明或定义。 引用不是值,不占存储空间。声明引用时,目标的存储状态不会改变。,13,指针与数组,声明与赋值 例:int a10, *pa; pa= 通过指针引用数组元素 经过上述声明及赋值后: *pa就是a0,*(pa+1)就是a1,. ,*(pa+i)就是ai. ai, *(pa+i), *(a+i), pai都是等效的。 不能写 a+,因为a是数组首地址是常量。,14,设有一个int型数组a,有10个元素。用三种方法输出各元素:,使用数组名和下标 使用数组名和指针运算 使用指针变量,#include using namespace std; int main() int a10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 ; for (int i = 0; i 10; i+) cout ai “ “; cout endl; return 0; ,使用数组名和下标,15,#include using namespace std; int main() int a10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 ; for (int i = 0; i 10; i+) cout *(a+i) “ “; cout endl; return 0; ,使用数组名指针运算,16,使用指针变量,#include using namespace std; int main() int a10 = 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 ; for (int *p = a; p (a + 10); p+) cout *p “ “; cout endl; return 0; ,17,指针与引用的区别,指针其实就是一个变量,和其他类型的变量是一个样子的,其是一个占用四字节的变量(32位机上),它与其他变量的不同之处就在于它的变量值是一个内存地址,指向内存的另外一个地方。而引用则是变量的一个别名。 注意:一个指针变量可以指向NULL,表示它不指向任何变量地址,但是引用必须在声明的时候就得和一个已经存在的变量相绑定,而且这种绑定不可改变。,指针与引用的联系,引用在底层通过指针来实现 一个引用变量,通过存储被引用对象的地址,来标识它所引用的对象 引用是对指针的包装,比指针更高级 指针是C语言就有的底层概念,使用起来很灵活,但用不好容易出错 引用隐藏了指针的“地址”概念,不能直接对地址操作,比指针更安全,引用与指针的选择,什么时候用引用? 如无需直接对地址进行操作,指针一般都可用引用代替 用更多的引用代替指针,更简洁、安全 什么时候用指针? 引用的功能没有指针强大,有时不得不用指针: 引用一经初始化,无法更改被引用对象,如有这种需求,必须用指针; 没有空引用,但有空指针,如果空指针有存在的必要,必须用指针; 函数指针; 用new动态创建的对象或数组,用指针存储其地址最自然; 函数调用时,以数组形式传递大量数据时,需要用指针作为参数。,动态申请内存操作符 new,new 类型名T(初始化参数列表) 功能:在程序执行期间,申请用于存放T类型对象的内存空间,并依初值列表赋以初值。 结果值:成功:T类型的指针,指向新分配的内存;失败:抛出异常。 例如: int *p; char *q; p = new int; q = new char(a),22,释放内存操作符delete,delete 指针p 功能:释放指针p所指向的内存。p必须是new操作的返回值。 例如: int *p; p = new int; delete p;,申请和释放动态数组,分配:new 类型名T 数据长度 数据长度可以是任何表达式,在运行时计算 释放:delete 指针p 释放指针p所指向的数组。p必须是用new分配得到的数组首地址。 例如: int *p; p = new int10; p0 = 1; delete p;,23,命名空间:namespace,命名空间可以将全局空间分为不同名称的范围。避免名字的冲突。 例如:a.h 中有一个变量为sum。b.h中有一个变量叫sum。如果把两个头文件都包含进来。会造成名字冲突。解决办法使用不同的namespac

温馨提示

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

评论

0/150

提交评论