2012-11-15 3 views
1

배열에있는 모든 양수를 합산하는 함수가 있지만 함수 매개 변수 배열을 포인터로 사용하는 프로그램을 작성해야했습니다. 주 함수에서 sum 함수를 호출하려고 할 때 문제가 발생합니다. 여기 내 소스 코드입니다 :함수에서 배열 포인터를 사용하는 방법은 무엇입니까?

#include <stdio.h> 
#include <conio.h> 
int posit(int *x[], int n){ 
    int s=0; 
    for(int i=0; i<n; i++){ 
    if(*x[i]>0){ 
     s=s+*x[i]; 
    } 
    } 
    return s; 
} 
int main(){ 
    int k; 
    scanf("%d",&k); 
    int a[k]; 
    for(int i=0; i<k; i++){ 
    scanf("%d",&a[i]); 
    } 
    int b=posit(&a,k); 
    printf("%d\n", b); 
    getch(); 
    return 0; 
} 

답변

5

배열이 함수로 전달되면 배열은 첫 번째 요소에 대한 포인터로 사라집니다. 발 기능의 서명 변경 :

int posit(int* x, int n){ /* Equivalent to 'int posit(int x[], int n)' */ 

*x[i] 단지 x[i]에서 함수에서 배열의 요소 액세스 구문 변경. 인보 기능 : 언급 할 가치가

int b=posit(a,k); 

또 다른 점은, 만든 할당 수를 반환 scanf()의 반환 값을 확인하는 &a[i] 실제로 할당되는 프로그램 이후에 초기화되지 않은 변수를 사용하지 않는 확인하는 것입니다.

C FAQ의 Arrays and Pointers 섹션이 유용 할 수 있습니다.

+0

당신은 말을 사용할 수 주에서이 함수를 호출하기로

소스를 수정할 수 있습니다, 그것은 posit // int b = posit (& a, k) // 함수를 호출 한 후 [여기서 배열은] [] [] [] [] [] 될 것입니다. 나는 당신이 처음에 말했듯이 그것을 썼지 만 제 가정 교사가 거부했습니다. 그는 내가 이런 식으로 함수를 작성하도록 만든다 // int posit (int * x [], int n) // – bbilegt

+1

@filemonster,'int * x []'는'int *'의 배열이다.'' int'. – hmjd

+0

@filemonster : 또한, '& a'는 배열에 대한 포인터이고'int (*) [k]'유형을가집니다. – newacct

1

실제로 예를 들어 함수 포인터를 포인터로 전달하고 있습니다 (유사한 표기법이 주 인수 char *argv[]과 함께 사용되는 경우가 많습니다).

배열을 함수로 전달하는 동안 hmjd post에서 언급했듯이 이것은 첫 번째 요소의 주소로 변환됩니다. 포인터 (int *x)를 명시 적으로 사용하는 대신 배열 표기법 (int[] 또는 int[k])을 사용할 수도 있지만 동일합니다.

제공된 두 번째 방법 (int[k]) 크기는 중요하지 않으며 내부 기능은 알 수 없습니다. K &에서

0

... 그래서 당신은 만 첫 번째 요소를 전달한다

When an array name is passed to a function, what is passed is the 
location of the initial element. Within the called function, this 
argument is a local variable, and so an array name parameter is a 
pointer, that is, a variable containing an address. 

R2

이 여러 차원 배열을 다루고있는 크기를 포함하는 유일한 중요하지만 이것은 다른 이야기입니다 기능. 이 이해되면

int posit(int *x, int n) 

을 다음과 내가 * X [] 쓸 경우

int b=posit(a,k); //Note only the location of the first element is being passed

관련 문제