난 Cint (* f [])()의 차이점은 무엇입니까? 및 int f []();
int f[](); /* this one is illegal */
에 포인터이를 찾아 :
int (* f [])(); /* this one legal. */
난 정말 두 번째의 사용 무엇을 알고 싶습니다.
감사합니다.
난 Cint (* f [])()의 차이점은 무엇입니까? 및 int f []();
int f[](); /* this one is illegal */
에 포인터이를 찾아 :
int (* f [])(); /* this one legal. */
난 정말 두 번째의 사용 무엇을 알고 싶습니다.
감사합니다.
당신이 초기화를 사용하는 경우 두 번째 예는 매우 유효합니다 블록. 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;
}
고마워 ~. 내가 혼란스러워하는 것에 집중하라.^_ ^ – lushl9301
함수 배열의 크기를 알 수 없기 때문에 두 번째 예제가 올바르지는 모르겠지만 함수 포인터의 배열은 다음과 같습니다. 크기는 알려진 것 :
int a()
{
return 0;
}
int main(int argc ,char** argv)
{
int (* f [1])();
f[0] = a;
}
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. */
: 't 적 (아마도 다차원) 배열의 가장 안쪽에 배열의 차원을 지정해야합니다 spiral.anderson.html –
명확하지 않은 선언을위한 유용한 사이트 : http://cdecl.org/ – hmjd
함수의 배열을 선언 할 수 없습니다 (함수에 의해 차지 된 메모리는 알 수 없기 때문에). 함수에 대한 포인터의 배열 만 선언 할 수 있습니다. – nhahtdh