网站大量收购独家精品文档,联系QQ:2885784924

第7章+指针 C语言大学实用教程课件.pptVIP

  1. 1、本文档共82页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
通过参数改变调用环境的方案包括三方面: 函数定义中用指针参数; 函数内用间接操作实际变量; 调用时以被操作变量的地址作为实参。 函数swap可定义为: void s *p, int *q) { int temp; temp = *p; *p = *q; *q = temp; } 交换变量m和n的值,调用形式是: s, n); swap的参数类型是(int *),实参必须是合法的整型变量的地址。 设有变量定义: int a[10], k; 调用swap的实例: s[0],a[5]); s[1],k); 介绍标准库函数scanf时,强调在接受输入的变量前必须写,就是将变量的地址传给scanf。 scanf采用与swap一样的技术,通过间接访问为指定变量赋值,把输入的值赋给指定变量。 swap函数的几种错误形式(1/3) 参数单向传递 void Swap(int x, int y) { int temp; temp = x; /*x,y为内部变量*/ x = y; y = temp; } swap函数的几种错误形式(2/3) 参数单向传递 void Swap(int *p1, int *p2) { int *p; p = p1; /*p1,p2为内部变量*/ p1 = p2; p2 = p; } swap函数的几种错误形式(3/3) 指针p没有确切地址 void Swap(int *p1, int *p2) { int *p; /*指针p未初始化*/ *p = *p1; *p1 = *p2; *p2 = *p; } 与指针有关的一些问题 空指针值:一个特殊指针值,表示指针变量闲置(未指向任何变量)。唯一对任何指针类型都合法的值 空指针值用0表示,标准库专门定义了符号常量 NULL   p = NULL; 和 p = 0; 相同 前一写法易看到是指针,用时必须包含标准头文件。 指针初始化 指针变量定义时可用合法指针值初始化: int n, *p = n, *q = NULL; 若没有初始化,外部指针和局部静态指针自动初始化为用空;局部自动指针不自动初始化。 指针使用中的常见错误 使用指针的最常见错误是非法间接访问:在指针未指向合法变量的情况下做间接。如: int f (...) { int *p, n = 3; *p = 2; ... } p没有初始化,没有指向合法变量。 “悬空指针”指值不是(当时)合法的变量地址的指针变量,也常被称为“野指针”。 间接访问悬空指针是严重错误,后果可能很严重。 常见错误写法(设p是悬空int指针,n是int变量): swap(p, n); scanf(..., p); scanf(..., n); 编译程序不能发现scanf的错误。有些系统可能对第一个例子(假设p未初始化)给出警告。 间接访问空指针也同样无理,是非法的。 例 7.3 试用函数编程实现打印最高分及其学号 例7.5 字符串与字符数组、字符指针 C语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理 字符串 一串以\0结尾的字符 字符数组 每个元素都是字符类型的数组 char string[100]; 字符指针 指向字符类型的指针 char *p; 数组和指针可以等同看待,上面三者本质上是一回事 字符指针变量与字符数组的区别 定义方法不同 char str[10]; char *ptr; 初始化含义不同 char str[10]={“china”};//为数组中的每个 元素赋初值 char *ptr=“china”;//用字符串“china”的 首地址,给指针变量ptr赋初值。 赋值方法不同 char str[10]; str = ”china”; /*错误*/ strcpy(str,”china”); /*正确*/ char *ptr; ptr = ”china”; 字符指针是变量,而数组名是地址常量 输入字符串时略有不同 使用字符指针的注意事项 字符指针变量必须有明确的指向,否则使用是危险的 例如,输入字符串时 char *a; scanf(%s, a); /*错误*/ 应为: char *a; char str[10]; a = str; scanf(%s, a); /*正确*/ 定义

文档评论(0)

Epiphany + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档