0

我试图“选择排序”一个数组。但不是只用“for循环”显示原始数组,而是超越正常方式并实现我学到的东西,我决定将原始数组传递给一个名为“org_array”的函数并尝试在“void”中调用它主要的()”。但是有几个错误。我无法弄清楚我在传递参数时犯了什么错误。请帮忙?

代码:

#include<iostream>
#include<conio.h>
using namespace std;
extern int s;
void org_array(int arr[30],int y);
void main()
{
    int i,n,j,pos,a[30];
    cout<<"Enter n: "<<endl;
    cin>>n;
    cout<<"\nEnter array: "<<endl;
    for(i=0;i<n;i++){   
            cin>>a[i];
    }
    cout<<"Orginal Array: ";
    org_array(a[30],n);
    /*for(i=0;i<n;i++){ 
            cout<<a[i]<<" | ";

    }*/
    for(i=0;i<n-1;i++)
    {
        int small=a[i];
        pos=i;
        for(j=i+1;j<n;j++)
        {
            if(a[j]<small)
            {
                    small=a[j];
                    pos=j;
            }
        }
        int temp=a[i];
            a[i]=a[pos];
            a[pos]=temp;

    }
    cout<<"\tSorted Array: ";
    for(i=0;i<n;i++){   
            cout<<a[i]<<" | ";
    }
    getch();
}
void org_array(int arr[30],int y){
    for(s=0;s<y;s++)
    {
        cout<<" "<<arr[s];
    }
}
4

2 回答 2

3
org_array(a[30],n);

是不正确的。它应该是:

org_array(a,n);

并且main应该int按照 ISO 返回。此外,您的声明和定义分别应该是这样的:

void org_array(int [],int); // declaration - removed 30 since we might want to pass an array of larger size

void org_array(int arr[],int y) //definition
{
    for(int s=0;s<y;s++)  // You did not declare s as int
    {
        cout<<" "<<arr[s];
    }
}

只是一个旁注:

出现在表达式中的 T 数组类型的左值[参见问题 2.5]衰减(除了三个例外)成指向其第一个元素的指针;结果指针的类型是指向 T 的指针,因为数组不是“可修改的左值”

(例外情况是数组是 sizeof 或 & 运算符的操作数,或者是字符数组的文字字符串初始值设定项。)

于 2013-10-05T08:12:55.367 回答
1

在您的代码中:

cout<<"Orginal Array: ";
org_array(a[30],n);

应该只传递数组的名称作为参数。数组作为对内存块地址的引用传递。您在调用中指的是数组中的特定索引。http://www.cplusplus.com/doc/tutorial/arrays/

org_array(a,n);

在您的代码中:

void org_array(int arr[30],int y){
for(s=0;s<y;s++)
{
    cout<<" "<<arr[s];
}
}

for 循环需要变量 s 的类型。我假设你想要一个整数。

for(int s=0; s<y; s++)

您的 main 函数也应该是 int 类型并返回 int 值。

于 2013-10-05T08:39:21.187 回答