我试图“选择排序”一个数组。但是不是仅仅使用“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];
}
}
答案 0 :(得分:3)
org_array(a[30],n);
不正确。它应该是:
org_array(a,n);
根据ISO,main
应返回int
。此外,您的声明和定义应分别采用以下方式:
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];
}
}
只是旁注:
表达式中出现的类型为array-of-T的左值[see question 2.5]衰减(有三个例外)为指向其第一个元素的指针;结果指针的类型是指向T的指针,因为数组不是“可修改的左值”,
(例外情况是数组是sizeof或&amp;运算符的操作数,或者是字符数组的文字字符串初始值设定项。)
答案 1 :(得分: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值。