C++的指针循环问题,

我想问的是for(p=str;*p;p++)for(q=r=p;*q;q++)if(*r>*p)r=q;if(*r!=*p)c=*p;*p=*r;*r=c;是怎样循环的,... 我想问的是
for(p=str;*p;p++)
for(q=r=p;*q;q++)
if(*r>*p)
r=q;
if(*r!=*p)
c=*p;
*p=*r;
*r=c;
是怎样循环的, 这个程序的功能是 排序吧,由小到大排序。
特别是 *r!=*p
有什么作用啊。。。
展开
 我来答
kingfeng588
2012-05-17 · TA获得超过2494个赞
知道大有可为答主
回答量:1475
采纳率:50%
帮助的人:1806万
展开全部
代码有误,作用是对字符串从小到大排序.

修改后:
#include <stdio.h>

void main()
{
char *p,*q,*r,c,str[7] = "231465";

for(p=str;*p;p++) // 从str的第一个字符开始循环,结束条件为*p(也就是*p!='\0' , '\0'是字符串结束符)
{
for(q=r=p;*q;q++) // 从p开始循环,r指向p,结束条件为*p(也就是*q!='\0' , '\0'是字符串结束符)
{
if(*r>*q) // 如果找到一个比r小的字符 // 这里条件错误,(*r>*p)修改为(*r>*q) ,不然此循环没有意思,因为r和p的指向没有变化。
{
r=q; // r指向这个小字符,第二层循环结束之后,r指向p后面的最小的字符
}
}
if(*r!=*p) // 如果r和p指向的字符不相等,就交换这两个数,
// 使得p指向的字符变成最小的字符,然后继续第一层循环
// 寻找下一个最小的数。
{
c=*p;
*p=*r;
*r=c;
}
}

}
qiaodamo
2012-05-17 · TA获得超过912个赞
知道小有建树答主
回答量:337
采纳率:100%
帮助的人:275万
展开全部
这段代码似乎缺了一些大括号,否则解释不通,加上大括号应该是下面这样子

for(p=str;*p;p++) // 从str的第一个字符开始循环
{
for(q=r=p;*q;q++) // 从p开始循环,r指向p
{
if(*r>*p) // 如果找到一个比r小的字符
{
r=q; // r指向这个小字符,第二层循环结束之后,r指向p后面的最小的字符
}
}

if(*r!=*p) // 如果r和p指向的字符不相等,就交换这两个数,
// 使得p指向的字符变成最小的字符,然后继续第一层循环
// 寻找下一个最小的数。
// 这里的判断实际上没有必要,不管r与p是否相等,直接交换就行,
// 如果它们相等,交换和不交换是一样的。
{
c=*p;
*p=*r;
*r=c;
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
永远的蕾咪
2012-05-17 · TA获得超过123个赞
知道小有建树答主
回答量:99
采纳率:0%
帮助的人:123万
展开全部
*r表示r指针指向的数的值,*p表示p指针指向的数的值。
更多追问追答
追问
额额,这个我懂撒  ,我就是不知道这2个FOR语句是怎样循环的,  第二个if语句 的*r!=*p
有什么作用撒?
追答
这是一个选择排序的算法,第一个for,对str中的所有数进行一次遍历,然后在第二个for中,它将当前数与后面的所有数进行比较。如果发现后面有任何数大于当前数的,就把它找出来,存在r中,然后把当前数和找出来的那个最大数换个位置。这样一遍下来就可以保证数组内的数是由大到小排列
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式