2017-12-30 60 views
3

함수에 배열을 보내려고하면 오류가 발생합니다.배열을 함수 인수로 올바르게 전달하는 방법은 무엇입니까?

이 내 minunit 테스트 프로그램입니다 :

#include "minunit.h" 
#include "calc.h" 
#include <stdio.h> 

int tests_run = 0; 

static char * test_Repetitve() { 
    mu_assert("error in test_Repetitive, Repetitive != 7", HistogramArray({1,2,3,4,5,6,7})== 7); 
    return 0; 
} 

static char * all_tests() { 
     mu_run_test(test_Repetitive); 
    return 0; 
} 

int main(int argc, char **argv) { 
    char *result = all_tests(); 
    if (result != 0) { 
     printf("%s\n", result); 
    } 
    else { 
     printf("ALL TESTS PASSED\n"); 
    } 
    printf("Tests run: %d\n", tests_run); 

    return result != 0; 
} 

mu_assert("error in test_Repetitive, Repetitive != 7", HistogramArray({1,2,3,4,5,6,7})== 7); 

이며이 기능에 간다와 내가 문제가있는 라인 : 기본적으로

int HistogramArray(int one[]) 
{ 
    int arrchk[TWENTY+ONE] = { ZERO }, i, j,counter=0;//arrchk is an array that counts how many times the number appears. 
    for (i = ZERO; i<N; i++) 
     arrchk[one[i]]++; 
    for (i = ZERO; i<TWENTY+ONE; i++) 
    { 
     if (arrchk[i] != ZERO) 
         { 
         printf("the number is %d ", i);//printing the histogram. 
          counter++; 
         } 
     for (j = ZERO; j<arrchk[i]; j++) 
     { 
      printf("*"); 

     } 
     if (arrchk[i] != ZERO)printf("\n"); 
    } 
return counter; 

내가 카운터가 히스토그램 함수에서 7인지 확인해야합니다. 어떤 제안입니까?

+2

'{1,2,3,4,5,6,7}'은 배열이 아니며, 중괄호로 묶은 이니셜 라이저입니다. 그 자체로는 유형이 없습니다. – StoryTeller

+1

[이미지] (https://en.wikipedia.org/wiki/Collage)가 표시되지 않습니다. –

+0

[mcve]를 게시하여 문제를 재현 할 수 있도록하십시오. – user3629249

답변

5

HistogramArray({1,2,3,4,5,6,7})의 문법으로 인해 문제가 발생합니다. 여기에 {1,2,3,4,5,6,7}은 자체 배열이 아니며, 이니셜 라이저의 중괄호로 구성된 목록입니다. HistogramArray() 함수는 배열을 인수로 기대합니다.

당신은하지만, 배열처럼 사용하는 compound literal

HistogramArray((int []){1,2,3,4,5,6,7}) 

의 구문을 사용할 수 있습니다.

인용 C11 장 §6.5.2.5,

이니셜의 braceenclosed 리스트 뒤에 괄호 형명 구성 후위 식 리터럴 화합물이다. 값이 이니셜 라이저 목록에서 제공되는 이름이없는 객체를 제공합니다. 6.7.9에 규정 된 유형 이름이 알려지지 않은 크기의 배열을 지정하는 경우

는 크기가 초기화리스트에 의해 결정되고, 문자 화합물의 종류의 인 배열 형식이 입니다. [...]

이렇게하면 중괄호 묶음 목록의 요소로 초기화되는 이름없는 배열이 제공됩니다.

+0

@AlexKreinis 엄밀히 말하면, 이것은 배열을 함수 인자 *로 전달하지 않습니다. * 이것은 배열 리터럴을 쓰는 것입니다 *. 배열은 함수에 전달 될 수 없습니다. 대문자로 함수에 건네지는 것은 배열이 아니라 포인터입니다. 그것은 여전히 ​​당신을 위해 일할 것이지만 이상적으로 당신은 그 차이를 알아야합니다. –