- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章节 数组与指针
第8章 数组与指针 数组与指针涉及到数据在内存中的存储位置问题,数组由连续的存储单元组成,最低地址对应于数组的第一个单元,最高地址对应于数组的最后一个单元。指针是一种特殊的变量,该变量所存放的是内存的地址,通过指针变量可访问所指向内存空间中的内容。本章将通过数组与指针的介绍,初步探讨C语言的数据结构。 8.1 一维数组 数组是一组相关的内存位置,他们都具有相同的名称和类型。为引用数组中的特定位置或元素,须指定数组名称和数组中特定的元素的位置编号,该编号即是数组下标。一维数组是只使用一组下标表表示的数组。 8.1.1 一维数组的一般形式 一维数组的一般声明形式为: 数据类型 数组名[长度]; 8.1.2 字符串使用的一维数组 字符型数组可以存放字符串数据,字符串数组与一般的字符数组的区别是字符串数组包含字符串结束符“\0”,该符号的ASCII码值为0。因此,字符串一维数组的长度要比实际字符串的长度多1元素。 8.2 二维数组 C语言允许使用多维数组,即使用多组下标的数组,二维数组是最常用的多维数组。多维数组在内存中存放数据的顺序与一维数组相同,使用连续的存储单元。 8.2.1 二维数组的一般形式 二维数组的一般声明形式为: 数据类型 数组名[长度1][长度2]; 数组的总长度等于长度1与长度2的乘积。 8.2.2 二维字符串数组 二维字符串数组可以看作是多个一维字符串数组,第一组下标长度即存放的字符串个数,第二组下标长度是可存放的最长的字符串长度加1。标准函数库中的字符串函数处理二维字符串数组时,必须给出第一组下标,每次只能处理其中一个字符串。 8.3 多维数组 多维数组是指拥有多组下标的数组,维数的限制由具体编译器决定。多维数组的一般声明形式为: 数据类型 数组名[长度1] [长度2]……[长度n]; 数组的总长度等于每组下标长度的乘积。多维数组使用连续的存储空间,编译器在为多维数组分配内存单元时,首先从“数组[0][0]……[0]”开始,延最后一组下标顺序分配,当分配到长度n后,将倒数第二组下标加上1,继续延最后一组下标顺序分配。 8.4 指针与指针变量 在程序中声明变量后,编译器就会为该变量分配相应的内存单元,也就是说,每个变量在内存会有固定的位置,有具体的地址。 8.5 指针变量的定义与引用 指针变量是包含内存地址的变量。一般的变量直接包含一个特定的值,而指针变量包含的是某一特定数据类型的内存地址。普通变量直接引用其中的值,指针变量则间接引用所指向内存地址中的值。指针变量在使用前需要声明与初始化。 8.5.1 指针变量的定义 指针变量定义时,需要指定所指向的数据类型。声明指针变量的一般形式为: 数据类型 *变量名; “*”运算符通常称为间接运算符或间接引用运算符,在声明中以这种方式使用间接运算符时,它用以表明被声明的变量是指针变量。 8.5.2 指针变量的引用 利用指针变量可直接改变内存中某一单元的值,这是一种对系统底层的访问。指针变量为复杂的操作带来便利的同时,也存在很大的安全隐患,使用不当时极容易引起程序的终止甚至系统死机。 C语言有两个指针运算符,分别是取地址运算符与间接引用运算符,这两个运算符都是一元运算符,他们的优先级仅次于一元算术运算符。 8.6 指针与数组 数组在内存中以顺序的形式存放,数组的第一个存储单元的地址即数组的首地址。对一维数组来说,直接引用数组名就能获得该数组的首地址。指针变量可以存放与其内容相同的数组首地址,也可以指向某一具体的数组元素。通过这种方式,多维数组也能被看作一维数组来操作,简化了数组的操作方法。 8.6.1 指针与一维数组 定义一维数组后,可定义一个与其类型相同的指针变量指向该数组。 8.6.2 指针与二维数组 二维数组和其他多维数组都能看作一维数组进行指针操作。 8.6.3 指针与字符串数组 字符型指针变量指向字符串数组首地址后,该指针即可当作字符串使用。字符串处理函数通常根据字符串结束符判断该字符串的长度,所以这些函数都会延字符串首地址向后遍历,直到找到字符串结束符。 8.7 指针的地址分配 指针变量的取值是内存的地址,这个地址应当是安全的,不可以是随意的。否则,写入内存单元的值将会使得已存放的数据或程序丢失。应使用编译系统提供的标准函数来实现地址分配。 GCC编译器支持动态分配内存的函数malloc()和free(),他们包含在头文件stdlib.h中。动态内存分配的含义是在程序执行的过程中,动态的划分内存空间供程序使用。当程序不需要使用这些内存空间,则可以将其释放。malloc()函数的作用是向操作系统申请内存,free()函数的作用是释放所申请的内存。 8.8 指针数组 指针数组是一种特殊的数组,这类数组存放的全部是同一数据类型的内
文档评论(0)