正在加载图片...
第6单元指针 变量和函数的指针进行这样的运算是没有意义的。但是无论怎样分配,一个数组内的各元素 的相对位置总是固定的,所以对数组元素的引用除了使用下标以外,还可以通过使用指针运 算来实现,这是C++程序设计的一大特点 例6-3编写一个字符串复制函数 mystrcpy( 算法:我们知道,字符串的定义是以0为结束符的字符序列。因此复制字符串也只 需复制到0为止。设指针 source中存放着原来的字符串的地址,指针 destin中存放着新的字 符型数组的地址,则伪代码算法为 while*source! =0) /如果* source==0则表示原字符串结束 * destin=* source;//复制字符 // source移向原字符串中的下一个字符 destin +t / destin移向新字符数组的下一位置 destin =0 /在新字符串尾部添写一个结束符0 由于这个算法非常直观,所以上面的伪代码其实已经是最终的程序段了。由于C++的表 达式应用非常灵活,所以这段程序也可以写成: while((*destin++= *source++)!=0) 改写后的程序段只使用了半个语句( while语句的后半部分被省略掉了)!但是功能依 然不变,甚至新字符串尾部的0也已经被复制。C++的这种特点,是其程序比较精练的原因, 受到程序员们的偏爱。但是过分的精练也会使程序难以理解,有悖于结构化程序设计的基本 原则4。 程序: / Example6-3:复制字符串 nystrcpy(char *destin, char *source) ile(*source!=0) 4可能有人会说精练的程序效率高,其实这是一种误解。影响程序效率的因素很多,但源代码长度对程序效 率几乎没有直接影响。事实上,程序的效率表现在两个方面,一是程序运行速度,一是程序使用的数据占用 的存储空间大小。通常用相对于程序处理的数据量所执行的机器指令条数的数量级来表示程序的运行效率 (时间)。例如O(n)表示程序运行时间与数据量之间成比例,O(n2)表示程序运行时间与数据量的平方 成比例,运行时间的增长速度大于数据量的增长速度。显然,对于完成同样功能的两个程序来说,如果一个 程序的效率为O(n),另一个程序的效率为O(n2),则前者的效率高于后者。对程序的空间效率也可以 做如此分析。 对于上面的两个程序段来说,可以使用字符串长度表示数据量,通过简单的分析就可以得出结论,它 们的运行速度均为O(n),使用的数据占用的存储空间长度均为2n,所以效率基本相同。至于程序代码本 身的大小,应以编译后生成的目标代码长度为准,实践表明这两段程序所生成的目标代码长度亦相差无几第 6 单元 指针 - 116 - 变量和函数的指针进行这样的运算是没有意义的。但是无论怎样分配, 一个数组内的各元素 的相对位置总是固定的, 所以对数组元素的引用除了使用下标以外, 还可以通过使用指针运 算来实现, 这是C++程序设计的一大特点。 [例 6-3] 编写一个字符串复制函数 mystrcpy()。 算 法: 我们知道,字符串的定义是以 0 为结束符的字符序列。因此复制字符串也只 需复制到 0 为止。设指针 source 中存放着原来的字符串的地址,指针 destin 中存放着新的字 符型数组的地址, 则伪代码算法为 while(*source!=0) // 如果*source==0 则表示原字符串结束 { *destin = *source; // 复制字符 source ++; // source 移向原字符串中的下一个字符 destin ++; // destin 移向新字符数组的下一位置 } *destin = 0; // 在新字符串尾部添写一个结束符 0 由于这个算法非常直观, 所以上面的伪代码其实已经是最终的程序段了。由于C++的表 达式应用非常灵活, 所以这段程序也可以写成: while((*destin++ = *source++) != 0); 改写后的程序段只使用了半个语句(while 语句的后半部分被省略掉了)!但是功能依 然不变,甚至新字符串尾部的 0 也已经被复制。C++的这种特点, 是其程序比较精练的原因, 受到程序员们的偏爱。但是过分的精练也会使程序难以理解, 有悖于结构化程序设计的基本 原则4。 程 序: // Example 6-3:复制字符串 mystrcpy(char *destin, char *source) { while(*source!=0) 4 可能有人会说精练的程序效率高, 其实这是一种误解。影响程序效率的因素很多, 但源代码长度对程序效 率几乎没有直接影响。事实上, 程序的效率表现在两个方面, 一是程序运行速度, 一是程序使用的数据占用 的存储空间大小。通常用相对于程序处理的数据量所执行的机器指令条数的数量级来表示程序的运行效率 (时间) 。例如 O(n)表示程序运行时间与数据量之间成比例; O(n 2)表示程序运行时间与数据量的平方 成比例, 运行时间的增长速度大于数据量的增长速度。显然, 对于完成同样功能的两个程序来说, 如果一个 程序的效率为 O(n), 另一个程序的效率为 O(n 2),则前者的效率高于后者。对程序的空间效率也可以 做如此分析。 对于上面的两个程序段来说, 可以使用字符串长度表示数据量, 通过简单的分析就可以得出结论, 它 们的运行速度均为 O(n), 使用的数据占用的存储空间长度均为 2n, 所以效率基本相同。至于程序代码本 身的大小, 应以编译后生成的目标代码长度为准, 实践表明这两段程序所生成的目标代码长度亦相差无几
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有