注册 登录
编程论坛 C++教室

[求助]指针,看下错哪了。

a8451727 发布于 2007-07-26 02:25, 557 次点击

#include <iostream>
#include <iomanip>

using namespace std;
const int max=5;

int main()
{
int a[max];
int i,j,k,t;
int *p=a;
cout<<"Enter the a:";
for(i=0;i<max;i++)
cin>>*(p+i);

for(i=0;i<max;i++){
k=i;
for(j=i+1;j<max;j++)
if(*(p+j)<*(p+k)){
k=j;
t=*(p+k);
*(p+k)=*(p+j);
*(p+j)=t;
}
}
for(p=a;p<(a+max);)
cout<<*p++<<' ';
cout<<endl;
return 0;
}

用指针将数组从小到大排列。
但输出老是错的,哪出问题了
自己找不到啊

7 回复
#2
圆圆的鸟蛋2007-07-26 02:59
k=j;
t=*(p+k);
*(p+k)=*(p+j);
*(p+j)=t;
LZ仔细分析一下这里吧!因为一句k=j,导致了数据交换的错误!
在下个人觉得完全没有必要用指针来做,也完全没有定义变量k的必要。。
#3
zhaojinhai2007-07-26 11:15
t=*(p+j);
*(p+k)=*(p+j);
*(p+j)=t;
k=j;
试试这个
#4
aipb20072007-07-26 11:38

[CODE]int main()
{
int a[max];
int i,j,k,t;
int *p=a;
cout<<"Enter the a:";
for(i=0;i<max;i++)
cin>>*(p+i);
for(i=0;i<max;i++){
k=i;
for(j=i+1;j<max;j++)
if(*(p+j)<*(p+k)) //不用括号,每外层循环只做一次交换,内层只需要找最小索引
k=j;
t=*(p+k); //交换是索引i和k的值
*(p+k)=*(p+i);
*(p+i)=t;


}
for(p=a;p<(a+max);)
cout<<*p++<<' ';
cout<<endl;
return 0;
}[/CODE]


[此贴子已经被作者于2007-7-26 12:18:42编辑过]

#5
a84517272007-07-26 12:10
以下是引用圆圆的鸟蛋在2007-7-26 2:59:15的发言:
k=j;
t=*(p+k);
*(p+k)=*(p+j);
*(p+j)=t;
LZ仔细分析一下这里吧!因为一句k=j,导致了数据交换的错误!
在下个人觉得完全没有必要用指针来做,也完全没有定义变量k的必要。。

刚刚学到指针啊,练习一下的

#6
a84517272007-07-26 15:07
以下是引用aipb2007在2007-7-26 11:38:24的发言:

[CODE]int main()
{
int a[max];
int i,j,k,t;
int *p=a;
cout<<"Enter the a:";
for(i=0;i<max;i++)
cin>>*(p+i);
for(i=0;i<max;i++){
k=i;
for(j=i+1;j<max;j++)
if(*(p+j)<*(p+k)) //不用括号,每外层循环只做一次交换,内层只需要找最小索引
k=j;
t=*(p+k); //交换是索引i和k的值
*(p+k)=*(p+i);
*(p+i)=t;


}
for(p=a;p<(a+max);)
cout<<*p++<<' ';
cout<<endl;
return 0;
}[/CODE]




关于循环里面,最不懂就是多个或少个括号的区别

#7
aipb20072007-07-26 16:10

不加括号,循环的域只到下一句
加括号,到整个花括号结束

#8
a84517272007-07-26 21:34
多谢了
1