#include<iostream>
using namespace std;
void maopao(int *arr)
{
int length,i,j;
int temp;
length = sizeof(arr);
cout<<length;
for(i = 0;i<length-1;i++){
for(j = 0;j<length-i-1;j++)
{
if(arr[j]>arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
cout<<"排序以后:"<<endl;
/
for(i=0;i<length;i++)
{
cout<<arr[i]<<" ";
}
}
void main()
{
int *arr;
int n,i,q;
cout<<"Please input thr size of the array:";
cin>>n;
arr = (int*)malloc(sizeof(int)*n);
for(i = 0;i<n;i++)
{
cin>>q;
arr[i] = q;
}
cout<<"排序以前:"<<endl;
for(i=0;i<n;i++)
{
cout<<arr[i]<<" ";
}
maopao(arr);
}
一开始写的程序是在这样的,如果输入两个数,程序运行结果如下:
思考了好长时间也没发现问题,最后想出来怎么回事了,为什么会有两个随机数呢。原因就是这句话:
length = sizeof(arr);
我这里面用的是指针传递,所以arr是个指针,指针用sizeof不管指针指向的是什么,在32位操作系统中结果都是4,这就是当设置长度为2时,结果出错的原因了。调整后,正确程序如下:
#include<iostream>
using namespace std;
void maopao(int *arr,int count)
{
int length,i,j;
int temp;
//length = sizeof(arr);
length = count;
for(i = 0;i<length-1;i++){
for(j = 0;j<length-i-1;j++)
{
if(arr[j]>arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
cout<<"排序以后:"<<endl;
for(i=0;i<length;i++)
{
cout<<arr[i]<<" ";
}
}
void main()
{
int *arr;
int n,i,q;
cout<<"Please input thr size of the array:";
cin>>n;
arr = (int*)malloc(sizeof(int)*n);
for(i = 0;i<n;i++)
{
cin>>q;
arr[i] = q;
}
cout<<"排序以前:"<<endl;
for(i=0;i<n;i++)
{
cout<<arr[i]<<" ";
}
cout<<endl;
maopao(arr,n);
}
这样程序运行的结果如下: