- 1、本文档共35页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Pointers and Arrays C程序设计语言 第5章 指针与数组 内存(Random Access Memory)地址(Address) 计算机内的存储部件,活动中的所有指令和数据都保存在内存内 速度快,但是掉电即失 可以随机访问 只要指名要访问的内存单元的地址,就可以立即访问到该单元 地址是一个无符号整数(通常用16进制数),其字长与主机相同 内存中的每个字节都有唯一的一个地址 指针的故事 “该程序执行了非法操作,即将关闭” 这种错误几乎全是由指针和数组导致的 黑客攻击服务器利用的bug绝大部分都是指针和数组造成的 有些非计算机专业的人,尽量避免使用指针 指针的故事 铁杆C/C++程序员最挚爱的武器:指针 指针造就了C/C++的高效和强大 很多不可能的任务由指针完成 main(){char*a=main(){char*a=%c%s%c;printf(a,34,a,34);};printf(a,34,a,34);} 关于指针的原则 学习原则 一定要学会 其实通常的应用很简单 就是一个变量 复杂的应用也不建议使用 使用原则 永远要清楚每个指针指向了哪里 永远要清楚指针指向的位置是什么 数组(Array) 若干类型相同的相关数据凑到一起,就是数组 定义 类型 数组名[整型常数1][整型常数2] ……[整型常数n]; int a[6][4]; 使用 a[0][0]、a[1][2]、a[5][3] 每个元素都是一个普通变量 下标可以是任意整型表达式 数组的各个元素在内存中分布在一起,分布规律是……array.c 思考一下一维和三维数组怎么分布呢? 从类型的角度理解数组 int a[10]; 定义了一个有10个int类型元素的数组 a的类型可以看作int[10](只是看作,语法并不允许这么定义: int[10] a) int a[20][10]; 定义了一个有20个int[10]类型元素数组 a[0]、 a[1]……a[9]的类型是int[10],所以a[0][0]、 a[0][1]……a[19][9]的类型是int int a[30][20][10]; 这个呢? 这种特性决定了数组元素在内存的分布规律,也解释了数组的很多语法现象 数组初始化 数组定义后的初值仍然是随机数,一般需要我们来初始化 int a[5] = { 12, 34, 56 ,78 ,9 }; int a[5] = { 0 }; int a[] = { 11, 22, 33, 44, 55 }; 数组大小最好用宏来定义,以适应未来可能的变化 #define SIZE 10int a[SIZE]; 数组的使用 数组的下标都是从0开始 对数组每个元素的使用与普通变量无异 可以用任意表达式作为下标,动态决定访问哪个元素 for (i=0; iSIZE; i++) a[i] = 2 * i; 下标越界是大忌! 使用大于最大下标的下标,将访问数组以外的空间。那里的数据不是我们所想定的情况,可能带来严重后果 有时,故意越界访问数组会起到特别效果,但一定要对自己在做什么了如指掌 sizeof可以用来获得数组所占字节数 sizeof(a) sizeof(a[0]) 数组的用处与特点 保存大量同类型的相关数据 快速地随机访问 一旦定义,不能再改变大小 在编译阶段就确定了数组的大小 数组名几乎就是一个指针 指针(Pointer) int *p; 定义了一个指针变量p,简称指针p p是变量,int*是类型 变量都占用内存空间,p的大小是sizeof(int*) p用来保存地址。此时这个地址是哪呢(p指向哪呢)? int i;p = i; *p就像普通的变量一样使用,其值是p指向的内存的内容,类型是int(在上例和i等价) p可以动态(任意)地指向不同内存,从而使*p代表不同的变量 p = 0; p = a[0]; 指针 指针也是数据类型。指向不同数据类型的指针,分别为不同的数据类型 int*、float*、char*、int**、int***…… 指针指向非其定义时声明的数据类型,将引起warning void*类型的指针可以指向任意类型的变量 指针在初始化时一般int *p=NULL; NULL表示空指针,即无效指针 但它只是逻辑上无效,并不是真正地无效 如果指针指向一个非你控制的内存空间,并对该空间进行访问,将可能造成危险 与*运算符 运算的结果指向该变量的指针 int i, *p;p = i; int *p, a[10];p = a; int *p, a[10];p = a[0]; int *p, a[10];p = a[5]; *和指针的组合是一个变量,该变量的地址和类型分别是指针指向的地址和指针定义时指向的类型 int i, *p;p = i;*
文档评论(0)