C语言第八章-----指针补充版.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
预备知识 10.1 指针及其相关概念 10.2 变量的指针和指针变量 说明 指针变量同普通变量一样,使用之前不仅要定义说明,而且必须赋予具体的值,未经赋 值的指针变量其值不确定,如果使用可能会造成系统死机或错乱,所以指针变量在使用之前,一定要先赋值, 可以赋空值null或0,什么都不指向;没有赋值可能指向一个随机数,这个数可能指向程序区导致错误。 例中定义了一个整型变量和两个指向整型变量的指针,如果要将i的地址赋给指针,则可以ip=i; 此时,ip指向i;以后我们可以用*ip间接访问i; 指针变量的值为地址,无符号的整型数,但不能直接将整型常量赋给指针变量。 直接访问与间接访问 指针应用:通过指针变量访问所指变量。 *pointer ??a ??pointer 指针变量做形参在函数调用时,实参应为地址或指针变量,参数传递采用的仍是“值传递”方式 10.3 指针和数组 一、一维数组与指针 数组是连续存放的若干个元素的集合 数组名代表数组的首地址(起始地址),也就是第一个元素的地址。 如:int a[10],*p ;则:p=a;与p=a[0];等价 某一元素的地址:p=a[i]; 用指针引用该元素:*p a[i]; 数组的指针和指向数组的指针变量的概念 数组的指针:是数组的起始地址。 如:int a[10],*p ;则:p=a;与p=a[0];等价 数组元素的指针:是数组元素的地址。 p=a[i]; 当指针变量指向数组或数组元素时,它就是指向数组的指针变量。 当指针变量p指向数组时,p+1指向数组的下一个元素。假设一个整型元素占两个字节,p+1是使p的地址加2个字节。 数组元素的下标在内部实现时,统一用“基地址+位移”的方式处理,即a,a+1,a+i 故表示数组的地址:p+i;a+i; 表示数组元素的内容:a[i],* (p+i), *(a+i); 若指针变量指向了数组的某个元素,此时可以通过该指针使用*运算符引用该元素 p+i和a+i就是a[i]的地址,或者说它们指向数组a的第i个元素 (1)下标法 void main(){ int a[10],*p,i; for(i=0;i10;i++) scanf(%d,a[i]); printf(\n); for(p=a;pa+10;p++) printf(%d ,*p); } 指针运算 赋值运算:p=x,p=a,p=null; 注:指针类型相同。 加减运算 加法:指针±整数; eg:a+i、p ±i; (只能用于数组元素的引用,注意下标的有效范围) 指针相减运算:求两地址间距 用法:指针-指针 p-a 两个指针类型相同,并且指向同一个连续的存储区域 移动指针:p++ 对数组名不能采用此运算 C中调用函数时形实结合的方法都是采用“值传递”的方式 用变量名作为函数参数时传递的是变量的值,用数组名作为函数参数时,由于数组名代表的是数组首元素地址,因此传递的值是地址,要求形参为指针变量 (1)形参和实参都用数组名 void main() f(int x[],int n) {int a[10]; { … … f(a,10); } … } 对二维数组 int a[3][4],有 a-----二维数组的首地址,即第0行的首地址 a+i-----第i行的首地址 a[i] ? *(a+i)------第i行第0列的元素地址 a[i]+j ? *(a+i)+j -----第i行第j列的元素地址 *(a[i]+j) ? *(*(a+i)+j) ? a[i][j] 定义形式: 数据类型 (*指针名)[一维数组维数]; 例 int (*p)[4]; 10.4 字符串与指针 字符串的表示形式 字符串按字符数组的形式存放 字符串是以‘0’结尾的字符序列 字符串指针就是字符数组的首地址 字符串指针变量 定义:char *指针变量 例10.18:将字符串a复制为字符串b 例10.19:用指针变量处理例10.18的问题 字符串指针作函数参数 字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是字符串中首字符的地址,不是将整个字符串存放到字符指针变量中 char str[10]; scanf(“%s”,str); 10.5 指向函数的指针 编译时编译器给函数分配一个入口地址,该入口地址称为该函数的指针 使用函数指针变量还应注意以下两点: 函数指针变量不能进行算术运算,这是与数组指针变量不同的。数组指针变量加减一个整数可

文档评论(0)

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

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

1亿VIP精品文档

相关文档