다음과 같은 방법으로 헤더 파일에 함수를 선언 할 수 있습니까?C 함수 선언
extern int ap(char[][]);
우리는 함수에서 char [] []를 사용할 수 있습니까?
다음과 같은 방법으로 헤더 파일에 함수를 선언 할 수 있습니까?C 함수 선언
extern int ap(char[][]);
우리는 함수에서 char [] []를 사용할 수 있습니까?
2 차원 배열의 경우 마지막 치수에 대한 크기를 지정해야합니다. 그렇지 않으면 컴파일러에서이를 사용하는 방법을 알 수 없습니다. (그것은 비록 이름을 생략 괜찮습니다.)이 같은
:
extern int ap(char[][10]);
그러나 함수 선언에서 매개 변수 이름을 생략하는 것은 완전히 유효합니다. 그러나 함수를 정의 할 때 배열에 이름을 지정해야하며이 이름으로 참조 할 수 있습니다.
아니, 당신이 배열의 마지막 N-1 크기를 지정해야합니다. 자세한 내용은
extern int ap(char[][DIMENSION]);
는
아니,이 허용되지 않습니다 here 봐 - 그것은 불완전한 배열 유형에 대한 포인터로 매개 변수를 선언하려고 시도합니다. 당신이 불완전한 형태의 배열을 가질 수 있기 때문에
extern int ap(char[][10]);
char[][]
가 유효한 배열 형식이 아니며, char[]
이 불완전 :
배열 유형
이 같은 크기로 완료해야합니다. 나는 두 개의 배열 타입을 가지고 있기 때문에 혼란 스럽다는 것을 알고 있습니다. 그래서 같은 문제가있는 또 다른 예제가 있습니다 :char a[3][]
. 배열
은 길이가 3이고 요소 유형이
char[]
이지만
char[]
은 다시 불완전하며
invalid입니다.
"다차원 배열"을 사용하는 경우 실제로는 배열 배열이 있습니다. 예를 들어 typedef int U[3][5];
은 U으로 길이가 5 인 ints 배열의 길이가 3 인 배열을 만들고 typedef int H[5]; typedef H U[3];
과 같습니다. 만약 함수 파라미터를 가지는 가장 좌측의 치수를 생략 할 수
이유는 단지 함수 파라미터 형태 T[N]
의 배열 종류 는 T*
로 변환되고, N가 T*
에 T[]
주는 생략 할 수 있기 때문이다. 이는 "최상위"또는 "최 외곽"수준에서만 적용됩니다.
int f1(int a[3][5]);
int f2(int a[][5]);
int f3(int (*a)[5]);
typedef int T[5];
int f4(T a[3]);
int f5(T a[]);
int f6(T* a);
당신은 물론,이를 변경하지 않고 매개 변수 이름 에게 위의 선언의에서을 삭제할 수 있습니다.
왜 시도하고 알아 내면 되나요? –
@darren : "시도 중"은 언어 구조의 유효성을 테스트하는 올바른 방법이 아닙니다. 그곳에는 "GCC에서 작동합니다"라는 희생자가 충분히 있습니다 (한 예로). – AnT