2013-10-05 7 views
0

배열을 "정렬"하려고했습니다. 하지만 원래의 배열을 "for 루프"로 표시하는 대신 정상적인 방법을 뛰어 넘어 "org_array"라는 함수에 원래 배열을 전달하기로 결정한 후 "void"로 호출하려고했습니다. 본관()". 그러나 몇 가지 오류가 있습니다. 매개 변수를 전달할 때 오류가 무엇인지 알 수 없습니다. 도와주세요?C++ 오류에서 매개 변수로 배열 전달

코드 :

#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

어떤 오류를 겪었습니까? – imulsion

+0

C 프로그램을 C++로 작성하는 이유는 무엇입니까? C 언어에 문제가있는 것은 아니지만 다른 언어입니다. 또한, 루프 카운터 (!)를 만드는 데있어 중요한 점은 무엇입니까? – dasblinkenlight

답변

3
org_array(a[30],n); 

올바르지 않습니다. 그것은해야한다 :

org_array(a,n); 

그리고 main이 ISO에 따라 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]; 
    } 
} 

그냥 보조 노트 :

(세 제외) 식에 나타납니다 형 배열의-T의 [see question 2.5]이 붕괴 좌변로 첫 번째 요소에 대한 포인터.

(예외는 sizeof 또는 & 연산자의 피연산자이거나 리터럴 문자열 초기화 기일 경우는 예외입니다. 결과는 포인터의 형식입니다. 문자 배열에 대한) 코드에서

+0

'void org_array (int arr [30], int y);'배열 타입이 포인터로 쇠약 해져'void org_array (int * arr, int y);'와 정확하게 동일하다. 그래서, conpiler는 불평하지 않는다. 잘못된 크기에 대해서. 당신이 나를 믿지 않는다면, 그것을 시도하십시오, 나는 처음에 그것을 믿고 싶지 않았습니다 ... – cmaster

+0

업데이트 주셔서 감사합니다. – Sadique

+0

아니요, 이것은 배열을 사용할 때뿐만 아니라 항상 포인터로 붕괴하는 함수 선언의 배열 인수에 대한 것입니다. 함수 선언에서'int arr [30]'이라고 말하는 것은 본문에'int arr [30] '을 쓰는 것과 근본적으로 다른 것입니다. – cmaster

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(int s=0; s<y; s++) 

주 기능은 int 유형이어야하며 int 값을 반환해야합니다.