#include <stdio.h>

// 상수를 정의해야 함
#define ROWS 5
#define COLS 4

void test(int array[][COLS], int rows, int cols);



int main(void) {

  // 2차원 정수 배열 foo의 선언과 초기화
  int foo[ROWS][COLS] = {
     { 662,   7,   4,  74 },
     {   8, 396, 299,  95 },
     {  66,  73,  86,   0 },
     { 116,  26, 586,  42 },
     {  84,   7,  41,  11 }
  };


  test(foo, ROWS, COLS);

  puts("");  // 줄바꿈

  return 0;
}


void test(int array[][COLS], int rows, int cols) {
  for (int i = 0; i < rows; i++) {    // 2차원 배열의 요소들 하나씩 출력
    puts("");  // 줄바꿈
    for (int j = 0; j < cols; j++) {
      printf("%d ", array[i][j]);
    }
  }
}




2차원 배열이라고 해서 int** ptr을 사용하지 않는다.

함수가 배열을 넘겨 받을때 매개변수에 대한 정보를 얻어야 한다.

첫 번째로 int** ptr에서 매개변수는 int라는 것

두 번째로 ** ptr에서 2차원 배열이라는것

그리고 배열의 전체 사이즈를 얻게 된다.

하지만 2차원 배열이 넘어올 때 위의 정보로는 몇행 몇열의 배열인지 파악 할 수가 없으므로

함수에서 배열을 사용할 때 행 주소 증가시 몇 byte를 증가시켜야 하는지가 애매해진다.

그러므로 함수에서 2차원 배열을 매개변수로 받을 때는 열 정보를 포함시켜 전달하여야 한다.

void print_ar(int (*ptr)[4]);


'Development > C/C++' 카테고리의 다른 글

[const 키워드]  (0) 2013.10.22
[가장 간단한 이진수 출력]  (0) 2013.10.17
[배열을 null로 초기화]  (0) 2013.04.14
[문자열 함수]  (0) 2013.04.12
[volatile]  (0) 2012.12.13
Posted by cyj4369
,