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