c语言从入门到精通第12章.ppt
《c语言从入门到精通第12章.ppt》由会员分享,可在线阅读,更多相关《c语言从入门到精通第12章.ppt(41页珍藏版)》请在三一办公上搜索。
1、第12章指针的深入研究指针进阶,指针与数组 指针与字符串 综合应用报数游戏 跟我上机,第12章指针的深入研究指针进阶,指针与数组 指针与字符串 综合应用报数游戏 跟我上机,第12章指针的深入研究指针进阶,指针与数组 指针与字符串 综合应用报数游戏 跟我上机,第12章指针的深入研究指针进阶,指针与数组 指针与字符串 综合应用报数游戏 跟我上机,第12章指针的深入研究指针进阶,指针与数组 指针与字符串 综合应用报数游戏 跟我上机,12.1 指针与数组,12.1.1 指针与数组12.1.2 数组名作为指针12.1.3 指针与多维数组12.1.4 指针与数组参数,12.1.1 指针与数组,指针用于存储
2、地址,他和数组名紧密的联系在一起。下图就显示了一个数组名称为grade,包含5个整型数据的一维数组,这里每个整型元素占用4个字节。,12.1.1 指针与数组,访问数组元素,我们可以使用下标来实现,比如我们要访问数组元素grade3,在之前的章节里我们详细的讲解过,但是那时使用的方法其实隐藏了数组每一个元素的地址。根据之前讲过的地址的概念,加之我们已知的数组的特点,这个特点就是数组在内存总占用一块连续的存储区域,这样的话,如果我们知道数组的首地址,针对grade这个数组,就是已知grade0的地址,我们就可以通过增减偏移量,得到garde3的地址,从而访问到garde3的元素值,12.1.1 指
3、针与数组,12.1.1 指针与数组,【范例12-1】使用指针访问数组元素,分别使用下标和指针访问数组元素01#include 02 int main(void)03 04 int i;05 int grade=2,5,9,4,6;06 int*p;07 p=15,12.1.1 指针与数组,需要注意的是*(p+i)表达式中的括号是必须有的,不能省略,如果我们遗漏了小括号,将变成这样的表达式*p+i,它的含义之前在指针变量处已经进行了讲解,是在p所指向的存储单元的数值基础上在i,因为我们始终没有改变指针p的指向。,12.1.2 数组名作为指针,每个创建的数组,数组名就成为编译器为这个数组所创建的指
4、针常量名称,存储的是数组第一个元素的起始地址,也是我们所说的数组首地址。这样,我们就有多了一种获取数组元素地址的手段。如【范例12-1】中代码“p=”。,12.1.2 数组名作为指针,【范例12-2】使用数组名作为指针访问数组元素。01#include 02 int main(void)03 04 int i;05 int grade=2,5,9,4,6;06 int*p;07 p=grade;/*指针赋值*/08 printf(使用数组名访问数组元素:n);09 for(i=0;i5;i+)/*使用数组名*/10 printf(数组grade的第%d个元素是%dn,i,*(grade+i);
5、11 printf(使用数组指针访问数组元素:n);12 for(i=0;i5;i+)/*使用指针变量*/13 printf(数组grade的第%d个元素是%dn,i,*(p+i);14 return 0;15,12.1.2 数组名作为指针,面的代码大家一起来分析一下,看看错了吗?grade=grade+3;结果是有误。原因是,grade是数组名,它是编译器为这个数组创建的指针常量,常量当然是不能够再赋值的。再看下面的代码,是否有问题?p=grade;p=p+3;结果是正确的。原因是,p是指针变量,它初始值是grade数组的首地址,之后根据需要修改了p的值,也就是改变了指针变量p的指向。,12
6、.1.2 数组名作为指针,【范例12-3】已知一个含有10整型元素的一维数组array,使用指针,求出该数组的最大值,最小值和平均值,并输出。,12.1.2 数组名作为指针,【范例12-4】有n个整数,存储在数组array中,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数,并输出。,12.1.3 指针与多维数组,我们知道数组在内存中用连续的存储区域,这一点已经反复提到,我们以二维数组为例,数据是怎么存储的呢?假设存在二维数组array23,那么这6个数据在内存中按照行走Z形排列,在内存储中存储形式如下图所示。,12.1.3 指针与多维数组,多维数组的数组名也被编译器创建为常量,用
7、来存储该数组的首地址。数组名array存储的是array00元素的地址,也就是存储的值是&array00。我们也可以按照首地址加偏移量的形式,从而使指针指向该数组中任何一个元素,实现多维数组和指针的关联。,12.1.3 指针与多维数组,下面我们逐步细分,让大家掌握。第一步,我们写出最容易理解的形式:array12/*指的是一个元素*/&array12/*指的是array12元素的地址*/然后,我们深入一步:array/*指的是数组下标为0的那一行的首地址*/array+1/*指的是数组下标1的那一行的首地址*/&array1/*指的也是数组下标1的那一行的首地址*/,12.1.3 指针与多维数
8、组,接下来,我们进一步深入:array1/*等价array1+0,于指的也是array10元素的地址*/array1+2/*指的也是array12元素的地址*/*(array+1)+2/*指的也是array12元素的地址*/最后:*(*(array+1)+2)/*指的是元素array12值*/*(array1+2)/*指的是元素array12值*/,12.1.3 指针与多维数组,【范例12-5】使用指针访问二维数组,12.1.4 指针与数组参数,1.第一种情况:实参是数组,形参也是数组主调函数:int arr10;function(arr);被调函数:function(int arr).,12
9、.1.4 指针与数组参数,2.第二种情况:实参是数组,形参是数组指针主调函数:int arr10;function(arr);被调函数:function(int*p).,12.1.4 指针与数组参数,3.第三种情况:实参是数组指针,形参是数组指针。主调函数:int arr10;int*p=arr;function(p);被调函数:function(int*q).,12.1.4 指针与数组参数,4.第四种情况:实参是数组指针,形参是数组。主调函数:int arr10;int*p=arr;function(p);被调函数:function(int arr).,12.1.4 指针与数组参数,【范例1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 入门 精通 12
链接地址:https://www.31ppt.com/p-6503770.html