中易网

C++数组排序

答案:1  悬赏:30  
解决时间 2021-12-21 03:07
#include "iostream"
using namespace std;
void sortArray(int arr[]);
const M=5;
void main()
{
int lla[5]={1,5,6,3,4};
sortArray(lla);
//cout<<sizeof(lla)/sizeof(int)<<endl;
for(int h=0;h<=4;h++)
cout<<lla[h]<<endl;
}
void sortArray(int arr[])
{
int t;
for(int i=0;i<sizeof(arr)/sizeof(int)-1;i++)
for(int j=i+1;j<sizeof(arr)/sizeof(int);j++)
if(arr[j]<arr[i])
{
t=arr[j];
arr[j]=arr[i];
arr[i]=t;
}
}

为什么运行之后顺序还是不变?
最佳答案
问题出在sortArray函数中。

sizeof(arr)/sizeof(int), 这个表达式本意是求得arr数组元素的个数,
但是在你sortArray函数的这个上下文环境中是办不到的。

int arr[]这种貌似数组形式的形参, 编译器处理为 int *,也就是当作指针来处理。
那么sizeof(arr)就变成了sizeof(int *) 等与求整形指针的长度,这肯定
与你求数组长度的初衷是不符的。

sizeof(arr)/sizeof(int)这种求数组长度的用法得用在编译器明确知道arr是一个
数组名的上下文环境中,比如你的main函数中。

解决办法:
给你的函数sorrtArray 增加一个标记数组长度的形参。
void sortArray(int arr[],int size)
{
int t;
for(int i=0;i<size-1;i++)
for(int j=i+1;j<size;j++)
if(arr[j]<arr[i])
{
t=arr[j];
arr[j]=arr[i];
arr[i]=t;
}
}

供你参考。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
幛蔽的意思是什么?幛蔽的释义是什么啊?
我用safari把wifi设置不显示现在也没有wifi怎
偃榘的意思是什么啊?请解释下!
亲~关于平板电脑的问题~平板电脑可以玩联众和
我和老公都是外地人在上海买了一套房,我今天
水池在城市园林中用途很广,美化市容,重点装饰
麾汗的意思是什么?麾汗的释义是什么啊?
面理的意思是什么啊?请解释下!
请问一下这段代码是什么意思。。请详细分析一
求解的意思是什么?求解的释义是什么啊?
蜗牛每分钟爬行7分之3米,2分之3分钟可以爬性
梦见有人在我家里面乱插柳枝
张家口到张北通车?2月13日
触殃的意思是什么啊?请解释下!
审参的意思是什么?审参的释义是什么啊?
推荐资讯
扎硬的意思是什么?扎硬的释义是什么啊?
佛山服装设计哪个最学校好?
小米2S正常寿命有多长
“中信银联联名普卡(RMB)”是什么卡?
燕菜席的意思是什么啊?请解释下!
曹静生日快乐藏头诗
蒸包炉脉冲点火器上面有一个红指示灯是起什么
求公文写作的教程
你们的吉他是调到标准音还是比标准音低?
談晤的意思是什么?談晤的释义是什么啊?
美利达自行车中轴下面有个小孔能加油吗
懽侍的意思是什么?懽侍的释义是什么啊?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?