| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 903 人关注过本帖
标题:五个字符串排序,运行不了,请帮看一下,问题在哪里?
只看楼主 加入收藏
so_love
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:7
帖 子:812
专家分:4151
注 册:2013-11-25
收藏
得分:0 
beyondyf  大神,我跟你混了。

一花一世界、一叶一追寻、片片花叶落、情系何人身。
2014-02-17 10:54
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
以下是引用zhu_zhi在2014-2-15 23:10:07的发言:

楼主真是高啊!实在是高。
分析我原来代码的错误很到位,谢谢!
看你的分析,有两个收获:
1、知道错误所在,不应以**p为循环的上下限,因为**p是不断变化的,而是应该以数组a参照物。
2、因为错用**x,第一次知道实体和二级指针的区别,虽然现在还不是很明白。
再次感谢楼主!


呃,为了防止你理解错我的意思走了弯路,我觉得我有必要再解释一下“实体”的概念。

这个词是我用来描述“指针所指向的地址处的合法的变量”的。这不是个通用的官方的定义,是我个人的定义。

我很担心别因为我的表达能力有限而导致你理解错误。这里啰嗦两句希望能够解释清楚。

所谓“变量”是一段合法内存,你可以向其中写入或读取数据。

所谓“合法”是指拥有相应的权限(读、写,或二者兼有)。从80286开始的中央处理器具有了保护功能,这使得操作系统可以控制你对内存空间的使用。你只能操作系统分配给你的那部分内存。对其它内存的操作尝试将导致内存读写错误,操作系统可能会给你个警告或直接杀掉你的进程。

所谓“指针”它本身也是一个变量,只不过这个变量所存储的内容是一个地址值。对应这个地址值的变量就是该指针所指向的变量。如果这个变量是合法的,那么它就是我所说的“实体”。

C语言对全局和静态的没有初始化的变量会赋默认初始值(一般是0),但对局部变量不会赋予初始值。

所以如果声明一个局部的指针变量且没有给它赋过值的话,它的值可能是任何数,或者说这个指针可能指向任何一处内存。它所指向的内存可能是你可以操作的,也可能是你不能操作的。这样的指针称作“悬浮指针”。(这个词是比较通用的)

指针可以指向任何变量。如果一个指针(A)所指向的变量(B)也是一个指针,那么这个指针(A)称作(指向指针的指针)。(注意,这里还不能说它是二级指针)

如果指针(B)指向的是其它类型变量(比如char、int、struct、...),那么指针(A)可以称作指向这个类型的“二级指针”。

指针(B)也可以还是一个指针。那么这时的指针(a)可以是三级、四级、...、N级指针。但总可以称它为(指向指针的指针)。

不管(B)是什么,我所说的“指针(A)所指向的实体”都是指它。

关于多级指针最多可以有多少级。理论上可以有任意级,但实际中应编译器而异。任何编译器都只支持有限级的指针,具体某个支持多少级我没查过,有兴趣你可以自己测试一下(尝试申请前面加足够多的星号的指针),但满足ANSI标准的编译器至少支持12级指针。

这属于理论方面的东西了,实际应用中最常用的是一级指针,二级指针的使用都不算多,三级指针应用绝少。如果你的程序需要用到三级以上的指针,那么可以考虑换一个算法了。

指针其实并不是一个复杂的概念,只是应用中需要很谨慎。如果你的程序因指针指向了非法的位置而报错,你应该庆幸。如果它指向一个合法但不是你该操作的位置,如果你没有及时发现,那很可能造成灾难性的损失(比如月兔车的行为控制程序)。

重剑无锋,大巧不工
2014-02-18 17:56
zhu_zhi
Rank: 2
来 自:广西百色
等 级:论坛游民
帖 子:129
专家分:92
注 册:2013-4-25
收藏
得分:0 
回复 12楼 beyondyf
大师确是真的活雷锋,谢谢!
讲解得很好,但我还需要慢慢的消化。
2014-02-19 10:22
快速回复:五个字符串排序,运行不了,请帮看一下,问题在哪里?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.011699 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved