2014-02-05 1 views
-1

나는 코드는 실제로 밖으로 작동이 뭔가 ...을 만들려고, 마이크로 소프트 비주얼 스튜디오 익스프레스 2013을 사용하고 있지만, 여전히 오류가 코드 C4047와,이 : 'char *' differs in levels of indirection from 'char[24][50]'다차원 배열에 얼마나 많은 수준의 간접 참조가 있습니까?

는 그래서?

경고없이이 프로그램은 문제없이 작동 할 것으로 예상되므로 작동합니다. 나는 단지 뒤에서 일어나는 일을 이해하고 배우려고 노력하고 있습니다. (부실) 경고는 함수에서 다차원 배열을 전달하는 행을 나타냅니다. 나는 main에서 호출하는 방법

void mass_assigner(
    WORD * translations, 
    char * labels, 
    char * PermBannedKeys, 
    char * TempBannedKeys, 
    char * Cooldowns 
) 
{ ... } 

과 여기에 : 여기에 그 함수의 인수를 줄입니다

... 
mass_assigner(
    translations, 
    labels, 
    PermBannedKeys, 
    TempBannedKeys, 
    Cooldowns 
); 
... 

labels입니다 char labels[24][50] = { ... };

문제가 정말 무엇

? 지금까지 내가 아는 한 다차원 배열은 여러 수준의 간접 참조가있는 배열 배열이 아니라 단일 수준의 간접 참조가있는 배열입니다.

+0

'labels' 인' char **'/ 포인터에 대한 포인터 => 포인터에 대한 포인터 –

답변

2

당신은 함수에 2 차원 배열을 전달하는 경우 :

int labels[NROWS][NCOLUMNS]; 
f(labels); 

함수의 선언은 다음과 같아야합니다 :

void f(int labels[][NCOLUMNS]) 
{ ... } 

또는

void f(int (*ap)[NCOLUMNS]) /* ap is a pointer to an array */ 
{ ... } 
+0

'f (int 레이블 [NROWS] [NCOLUMNS]) {...} '가 분명히 작동하도록 추가하고 싶습니다. s, 나는 그것을 만들었다, 아마하지 않았다. 그러나 나는 아직도했다. 고마워. 원하지 않는 일은 함수의 인수로'** labels'을 쓰면 발생합니다. – ThoAppelsin