上海交大C课件.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
String = new char[5]; strcpy(String, “aaa”) String Program OS 数据段 栈 堆 “aaa\0” 动态变量存储在堆工作区 将存储字符串”aaa”的内存的首地址赋给指针变量String。 用指针表示的字符串的操作 可以直接作为字符串操作函数的参数。但必须注意,如果该指针指向的是一个字符串常量时,则使用是受限的。如不能作为strcpy的第一个参数 由于在C++中,数组名被解释成指向数组首地址的指针。因此,字符串是用一个指针变量表示,我们可以把此指针变量解释成数组的首地址,通过下标访问字符串中的字符。如string[3]的值是d。 用指针处理串 目的:编写一个记录串中单词的个数的函数。 关键技术:要传递一个字符串给函数 字符串作为函数的参数 字符串作为函数的参数和数组名作为参数传递一样,可以有两种方法 作为字符数组传递 作为指向字符的指针传递 两种传递方式的本质是一样的,都是传递了字符串的首地址 字符串作为字符数组传递时不需要指定长度。因为字符串操作的结束是依据‘\0’ #include ctype Using namespace std; int word_cnt(const char *s) { int cnt = 0; while (*s != \0) { while (isspace(*s)) ++s; //跳过空白字符 if (*s != \0) { ++cnt; //找到一个单词 while (!isspace(*s) *s != \0) ++s; //跳过单词 } } return cnt; } 统计字符串中单词数的函数 第7章 间接访问—指针 指针的概念 指针运算与数组 动态内存分配 字符串再讨论 指针作为函数参数和返回值 指针数组与多级指针 指向多维数组的指针 指向函数的指针 指针作为函数参数和返回值 指针作为函数参数 数组名作为函数参数 返回指针的函数 引用和引用传递 返回引用的函数 指针作为函数参数 例:编一函数,交换二个参数值。 void swap(int a, int b) { int c; c=a; a=b; b=c; } 希望通过调用swap(x, y)交换变量x和y的值 新手可能会编出如下的函数: 因为C++采用的是值传递机制,函数中a、b值的交换不会影响实际参数x和y的值 void swap(int *a, int *b) { int c; c=*a; *a= *b; *b=c; } 3 4 x y a b 交换x和y的值,可以调用swap(x, y) 用指针作为参数可以在函数中修改主调程序的变量值,即实现变量传递。必须小心使用!!! 正确的方法 能解一元二次方程的函数 目前为止我们了解到的函数只能有一个返回值,由return 语句返回。 一个一元二次方程有二个解,如何让此函数返回二个解。答案是采用指针作为函数的参数。 由调用程序准备好存放两个根的变量,将变量地址传给函数。在函数中将两个根的值分别放入这两个地址 函数原型 函数原型可设计为: void SolveQuadratic(double a, double b, double c, double *px1, double *px2) 函数的调用 SolveQuadratic(1.3, 4.5, 2.1, x1, x2) SolveQuadratic(a, b, c, x1, x2) 函数的参数有两类:输入参数和输出参数。一般,输入参数用值传递,输出参数用指针传递。在参数表中,输入参数放在前面,输出参数放在后面。 原型的改进 并不是每个一元二次方程都有两个不同根,有的可能有两个等根,有的可能没有根。函数的调用者如何知道x1和x2中包含的是否是有效的解? 解决方案:让函数返回一个整型数。该整型数表示解的情况 完整的函数 int SolveQuadratic(double a,double b,double c, double *px1,double *px2) { double disc, sqrtDisc; if(a == 0) return 3; //不是一元二次方程 disc = b * b - 4 * a * c; if( disc 0 ) return 2; //无根 if ( disc == 0 ) { *p

文档评论(0)

159****1748 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档