#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;
}
}
为什么运行之后顺序还是不变?
C++数组排序
答案:1 悬赏:30
解决时间 2021-12-21 03:07
- 提问者网友:爱你等于作孽
- 2021-12-20 22:39
最佳答案
- 二级知识专家网友:转身后的回眸
- 2021-12-20 23:54
问题出在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;
}
}
供你参考。
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;
}
}
供你参考。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯