c语言从入门到精通第12章.ppt

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《ASP.NET 3.5网站开发从入门到精通》 第12章 指针的深入研究——指针进阶 第12章 指针的深入研究——指针进阶 第12章 指针的深入研究——指针进阶 第12章 指针的深入研究——指针进阶 第12章 指针的深入研究——指针进阶 12.1 指针与数组 12.1.1 指针与数组 12.1.2 数组名作为指针 12.1.3 指针与多维数组 12.1.4 指针与数组参数 12.1.1 指针与数组 指针用于存储地址,他和数组名紧密的联系在一起。 下图就显示了一个数组名称为grade,包含5个整型数据的一维数组,这里每个整型元素占用4个字节。 12.1.1 指针与数组 访问数组元素,我们可以使用下标来实现,比如我们要访问数组元素grade[3],在之前的章节里我们详细的讲解过,但是那时使用的方法其实隐藏了数组每一个元素的地址。根据之前讲过的地址的概念,加之我们已知的数组的特点,这个特点就是数组在内存总占用一块连续的存储区域,这样的话,如果我们知道数组的首地址,针对grade这个数组,就是已知grade[0]的地址,我们就可以通过增减偏移量,得到garde[3]的地址,从而访问到garde[3]的元素值 12.1.1 指针与数组 grade[3]=grade[0] + 3 * 4 上面表达式的含义是gradep[3]的地址等于grade[0]地址加上12。写成以下的通式: 数组中下标为N元素的地址 = 数组的首地址 + N * sizeof(DataType) 例如: int grade[5]; /*定义array为包含5个整型数据的数组*/ int *p; /*定义p为指向整型变量的指针变量*/ p=grade[0]; 12.1.1 指针与数组 【范例12-1】 使用指针访问数组元素,分别使用下标和指针访问数组元素 01 #include stdio.h 02 int main(void) 03 { 04 int i; 05 int grade[]={2,5,9,4,6}; 06 int *p; 07 p=grade[0]; /*指针指向*/ 08 printf(使用下标访问数组元素:\n); 09 for(i=0;i5;i++) /*下标访问*/ 10 printf(数组grade的第%d个元素是%d\n,i,grade[i]); 11 printf(使用数组指针访问数组元素:\n); 12 for(i=0;i5;i++) /*指针访问*/ 13 printf(数组grade的第%d个元素是%d\n,i,*(p+i)); 14 return 0; 15 } 12.1.1 指针与数组 12.1.2 数组名作为指针 每个创建的数组,数组名就成为编译器为这个数组所创建的指针常量名称,存储的是数组第一个元素的起始地址,也是我们所说的数组首地址。这样,我们就有多了一种获取数组元素地址的手段。如【范例12-1】中代码“p=grade[0];”就可以改写为“p=grade;”。 12.1.2 数组名作为指针 【范例12-2】 使用数组名作为指针访问数组元素。 01 #include stdio.h 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个元素是%d\n,i,*(grade+i)); 11 printf(使用数组指针访问数组元素:\n); 12 for(i=0;i5;i++) /*使用指针变量*/ 13 printf(数组grade的第%d个元素是%d\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】

文档评论(0)

shaoye348 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档