2012-11-06 3 views
2

난 Cint (* f [])()의 차이점은 무엇입니까? 및 int f []();

int f[](); /* this one is illegal */ 

포인터이를 찾아 :

int (* f [])(); /* this one legal. */ 

난 정말 두 번째의 사용 무엇을 알고 싶습니다.

감사합니다.

+2

: 't 적 (아마도 다차원) 배열의 가장 안쪽에 배열의 차원을 지정해야합니다 spiral.anderson.html –

+2

명확하지 않은 선언을위한 유용한 사이트 : http://cdecl.org/ – hmjd

+2

함수의 배열을 선언 할 수 없습니다 (함수에 의해 차지 된 메모리는 알 수 없기 때문에). 함수에 대한 포인터의 배열 만 선언 할 수 있습니다. – nhahtdh

답변

2

당신이 초기화를 사용하는 경우 두 번째 예는 매우 유효합니다 블록. example를 들면 다음과 같습니다하려고

#include <stdio.h> 
int x = 0; 
int a() { return x++ + 1; } 
int b() { return x++ + 2; } 
int c() { return x++ + 3; } 

int main() 
{ 
    int (* abc[])() = {&a, &b, &c}; 
    int i = 0, 
     l = sizeof(abc)/sizeof(abc[0]); 
    for (; i < l; i++) { 
    printf("Give me a %d for %d!\n", (*abc[i])(), i); 
    } 
    return 0; 
} 
+0

고마워 ~. 내가 혼란스러워하는 것에 집중하라.^_ ^ – lushl9301

1

함수 배열의 크기를 알 수 없기 때문에 두 번째 예제가 올바르지는 모르겠지만 함수 포인터의 배열은 다음과 같습니다. 크기는 알려진 것 :

int a() 
{ 
    return 0; 
} 

int main(int argc ,char** argv) 
{ 
    int (* f [1])(); 
    f[0] = a; 
} 
1

int f[](); // 당신이 기능의 배열을 만들 수의 때문에 불법이다. 그것은 f는 인수

의 불특정 다수를 int를 반환하고 복용 함수 포인터의 배열 인 것을 말한다 그것은 C

에 불법 그러나 두 번째는

int (* f [])(); 법적

+0

아래 첨자의 우선 순위가 더 높다고 생각하십니까? – lushl9301

+0

아니요,'[]''''''''''->'은 같은 우선 순위를 가지고 있고 연관성은 오른쪽에서 왼쪽입니다 – Omkant

+0

K & R – Omkant

1
int f[](); /* this one is illegal */ 

불가능 기능의 배열을 선언합니다.

int (* f [])(); /* this one NOT legal, despite what the OP's post says. */ 

기능의 배열을 선언하려고 포인터 배열 크기가 지정된 경우 완벽하게 합법적 (그리고 재치있는) 것, 예를 들면 :

int (* f [42])(); /* this one legal. */ 

편집 : 형식 매개 변수 형식에 대해 배열에서 포인터로의 변환이 즉각 수행되므로 형식 매개 변수 형식으로 int (* f [])()으로 사용할 수 있습니다. 답변이 링크 http://c-faq.com/decl/ 보면이 같은 질문은 오늘 질문했다

void some_func(int (* f [])()); /* This is also legal. */ 
관련 문제