2014-04-17 4 views
1

은 내가 C에서 함수에 2 차원 배열을 전달하고 때 나는 5 Collumns는이있을 때 이것은C의 함수에 동적 2d char 배열을 전달하는 방법은 무엇입니까?

int test(myarray[][5]){ 
//something 
} 
int main(void){ 
//something 
test(myarray); 
return 0; 
} 

쓰기 것을 알고,하지만 난 스캔 프로그램의 시작 부분에 경우 어떻게해야합니까 행과 Collumns는 예 번호는

처럼 그래서
scanf("%d %d", &rows, &collumns); 
char myarray[rows][collumns]; 
test(myarray); 

내 테스트 함수의 선언, 내가, 내가 첫 번째 코드에서했던 것처럼 내가 5를 넣을 수 없습니다 알고에 있어야하고 내가 넣을 수없는 것을 1000과 같은 최대 값, 그리고 넣으면

int test(myarray[][collumns]) 

내 함수에 collumns가 정의되어 있지 않다 ...

+1

어떻게'에서 myArray **'와 별도로 배열의 크기를 전달하는 방법에 대한? 단지 여기서 추측해라. – Cu3PO42

답변

4

너비를 설정하는 또 다른 변수를 전달하십시오. 이것은 c99 기능입니다.

void test(size_t width , char myarray[][width]) 
{ 
} 

당신은 이런 식으로 부를 것이다 : test(collumns , array);

myarray 정확히 주에서 배열처럼 동작합니다. (myarray는 실제로 포인터이므로 sizeof 연산자는 배열이 아닌 포인터의 크기를 제공합니다)

배열의 높이 (예 : 행)를 전달해야합니다. .

0

당신은 동적 메모리 할당 사용할 수 있습니다

int main() { 
    int i; 
    char **myarray; 
    scanf("%d %d", &rows, &collumns); 
    myarray = (char**)malloc(rows); //Memory allocation for rows 
    for(i=0;i<rows;i++) { 
    myarray[i] = (char*)malloc(columns); //Memory allocation for colums 
    } 
    test(myarray); 
} 

int test(char** arr) { 
    //Write your code as it is 
} 
+0

그는 ANSI C를 쓰지 않고 있으며, VLA를 사용하고 있습니다. –

+0

@ z VL VLA는 무엇입니까? – Kraken

+1

[가변 길이 배열] (http://en.wikipedia.org/wiki/Variable-length_array) –

관련 문제