第6章 指针与数组-2011
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序设计
指针与数组
指针与数组的关系
多级指针的概念
在程序设计语言中,占用连续空间的数据对象都与其所占存储区域的起始地址相关。
如何用表明存储系统中线性连续区域的起始地址表示是几维空间的起始地址。
使用地址的不同级别描述不同空间数据对象的首地址 一级地址描述线性空间
二级地址描述平面空间
多级地址描述多维空间
又分别称为一级指针、二级指针和多级指针。
指针与数组的关系
指针与数组的关系
指针与数组的关系
指针与数组的关系
一维数组与指针的关系
000000000
0a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]
p1p2p1100p2
p2*******p1p21000
指针与数组的关系
2345678910
1a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]
p1
p2
5个整型数据(20个字节)
例6-2随机生成一个数组的所有元素,并用指针移动的方式输出这些元素值。
指针与数组的关系
指针与数组的关系
数组名与指向数组的指针变量的区别
根本的区别:
数组名是地址常量,任何想改变其值的运算都是非
法的,例如:a=p、a++等,只能是*(a+i);
指针变量的值是可以改变的,例如:p=arr、p++等
都是有意义的操作。
例6-3使用不同的指针形式引用一维数组元素示例。
指针与数组的关系
指针与数组的关系
二维数组与指针的关系
二维数组中的地址表示形式
一个二维数组a被认为是由若干个名字分别为:a[0]、
a[1]、a[2]…、a[i]、…的一维数组组成。一维数组
的名字代表了该一维数组的首地址,即该一维数组0号
元素的地址,可以表示为a[i]和&a[i][0]两种等价形
式。
按照地址加法的规则,一维数组a[i]的j号元素地址可
以表示为a[i]+j和&a[i][j]两种等价形式。由于a[i]
等价于*(a+i),所以有二维数组a的i行j列元素地址的
等价表示形式:a[i]+j、*(a+i)+j和&a[i][j]。
指针与数组的关系
指针与数组的关系
指针与数组的关系
指针与数组的关系
指向由若干个元素组成的数组的指针 指针的级别与它所指向的若干元素构成的数组结
构相关。
若元素构成的是一维数组,则相应的指针变量是二级指针变量;
若是二维数组,则对应三级指针变量。
因此若是n-1维数组,则对应n级指针变量
指针与数组的关系
程序设计中如果需要让指针的一次移动可以跨过所需要的数据对象个数
定义指向由若干个元素组成的一维数组的指针。定义指向由若干个元素组成的一维数组指针的一般形式为:[存储类别符] 数据类型符(*ptr)[常量表达式];
注:式中常量表达式的值就是指针所需要跨过的元素个数;
例:int (*ptr)[10];
定义了指针变量ptr;
指针ptr的一次移动可以移动过10个整型数据所占用的连续存储区域;
此时ptr 是二级地址;
指针与数组的关系
如果其定义中的常量表达式值与一个二维数组的列数
指针与数组的关系
例6-6使用指向由若干个元素组成的一维数组的指针处理二维数组。
例6-7指向若干个元素组成的一维数组指针变量作函数形式参数(求二维数组中全部元素之和)。
指针与数组
指针数组与命令行参数
指针数组
指针数组的概念
一组有序的指针的集合
所有元素必须是具有相同存储类型和指向相同数据类
型的指针变量
指针数组定义的一般形式为:
[存储类型] 数据类型*数组名[常量表达式];
指针数组初始化
[存储类型]数据类型*数组名[常量表达式]=
{地址量1,地址量2,…};
指针数组与命令行参数
指针数组与命令行参数
指针数组与命令行参数
命令行参数
概念:为了使程序运行时能从系统接收参数,C语言提供了程序在主函数中接收从命令行传递过来的实参的能力,这种参数称为命令行参数。
为了接收命令行参数,在定义主函数时使其带上形式参
数,其一般形式为:
void main(int argc,char*argv[]) 主函数的形式参数
整型参数用于记录命令行输入的参数个数,习惯于用
标识符argc表示;
指向字符的指针数组argv参数用于存放命令行上输入
的各实参字符串的起始地址,即指针数组的每一个元
素指向一个由命令行上传递而来的字符串。
指针数组与命令行参数
指针数组与命令行参数
命令行参数
使用命令行参数时的注意点
从命令行上带入的参数都是字符串,如果程序在功能上要求被带入的参数不是作为字符串使用,则需要在应用程序中进行合适的转换。
例6-11编程序实现功能:在执行程序时从命令行上带入两个实型数
据,在程序中求两个实数之和并输出。
指针与数组
用指针构成动态数组
动态数组的概念
动态数组就是可以在程序的运行过程中根据需要创建的数组数据对象。
在支持C99标准的C程序开发环境中,允许程序员根据在程序运行过程中提供的数组长度定义数组,亦即数组空间的
分配在程序的运行过程中完成。
在不支持C99标准的C程序开发环境中,通过结合使用C语
言的动态存储分配标准库函数和指针变量实现动态数组。