C++中指针变量储存的地址值可以直接比较大小吗?
C++中指针变量储存的地址值可以直接比较大小吗?比如下面这个程序,为什么我修改成这样就错了?#include<iomanip>#include<iostream>usin...
C++中指针变量储存的地址值可以直接比较大小吗?
比如下面这个程序,为什么我修改成这样就错了?
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
int a[10],i;
for(i=0;i<10;i++)cin>>a[i];
void pailie(int *p);
pailie(a);
for(i=0;i<10;i++)cout<<a[i]<<setw(8);
return 0;
}
void pailie (int *p)
{
int k;
int *m,*n;
m=p;
for(;m<m+10;m++)
{
for(n=m+1;n<n+9;n++)
{
if(*m<*n){k=*m;*m=*n;*n=k;}
}
}
} 展开
比如下面这个程序,为什么我修改成这样就错了?
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
int a[10],i;
for(i=0;i<10;i++)cin>>a[i];
void pailie(int *p);
pailie(a);
for(i=0;i<10;i++)cout<<a[i]<<setw(8);
return 0;
}
void pailie (int *p)
{
int k;
int *m,*n;
m=p;
for(;m<m+10;m++)
{
for(n=m+1;n<n+9;n++)
{
if(*m<*n){k=*m;*m=*n;*n=k;}
}
}
} 展开
7个回答
展开全部
您好,根据你的程序,我觉得你是对一个整型数组进行排序,排序方法为选择排序,定义的函数pailie()传递的是一个整型指针。
你程序的错误之处在于数组越界,也就是内存引用错误。
第一个for语句,m是变化的,m<m+10;恒成立,应该为m<p+10;
第二个嵌套的for(n=m+1;n<n+9;n++)
当m递增时,n+8回超过数组的边界,解决办法是
for(n=m+1;n<p+10;n++);
你程序的错误之处在于数组越界,也就是内存引用错误。
第一个for语句,m是变化的,m<m+10;恒成立,应该为m<p+10;
第二个嵌套的for(n=m+1;n<n+9;n++)
当m递增时,n+8回超过数组的边界,解决办法是
for(n=m+1;n<p+10;n++);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
int a[10],i;
for(i=0;i<10;i++)cin>>a[i];
void pailie(int *p);
pailie(a);
for(i=0;i<10;i++)cout<<a[i]<<setw(8);
return 0;
}
void pailie (int *p)
{
int k;
for(m=0;m<10;m++)
{
for(n=m;n<10;n++)
{
if(p[m]<p[n]){k=p[m];p[m]=p[n];p[n]=k;}
}
}
}
//内存地址本身也是整形可以比较大小、只是你的m++在内存中是地址后移一位并没有取到数组下一位的地址(int不只是占一位)
- - 好吧,楼上大神正解、、、
#include <iostream>
using namespace std;
int main()
{
int a[10],i;
for(i=0;i<10;i++)cin>>a[i];
void pailie(int *p);
pailie(a);
for(i=0;i<10;i++)cout<<a[i]<<setw(8);
return 0;
}
void pailie (int *p)
{
int k;
for(m=0;m<10;m++)
{
for(n=m;n<10;n++)
{
if(p[m]<p[n]){k=p[m];p[m]=p[n];p[n]=k;}
}
}
}
//内存地址本身也是整形可以比较大小、只是你的m++在内存中是地址后移一位并没有取到数组下一位的地址(int不只是占一位)
- - 好吧,楼上大神正解、、、
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-06-28
展开全部
地址不能比,但是指向的值随便比
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
int a[10], i;
for (i = 0; i < 10; i++)
cin >> a[i];
void pailie(int *p);
pailie(a);
for (i = 0; i < 10; i++)
cout << a[i] << setw(8);
return 0;
}
void pailie(int *p)
{
int k;
int *m, *n;
for (m = p; m < p + 10; m++) // m < m + 10 是永远true的 (不考虑overflow的话)
{
for (n = m + 1; n < p + 10; n++) // 同理
{
if (*m < *n) {
k = *m;
*m = *n;
*n = k;
}
}
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
m<m+10;n<n+9;
两个死循环了吧
两个死循环了吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询