본문 바로가기

c

함수와 2차원 배열로의 전달인수

1. 1차원 배열함수를 하위배열에 적용

void dub(int ar[], int size);

int junk[3][4];
for(i=0;i<3;i++)
dub(junk[i],4);

2. 1차원 배열함수를 2차원 배열에 적용


void dub(int ar[], int size);
int junk[3][4];
dub(junk[0],3*4);

2차원 배열이 메모리안에서는 커다란 하나의 배열로 저장 된 것을 이용

하지만 개념적으로 사용하기 좋지 않어.

3. 2차원 배열 함수 적용 -> 함수의 열과 행에 대한 정보에 호환

void dub(int ar[][4],int size) or void dub(int (*ar)[4],int size) //컴파일러 : 배열식 포기 -> 포인터식 표기

dub(junk,3)
함수안에서 2차원 배열처럼 사용


int ar[][]; //잘못된 선언, 예를 들어 ar[1]->ar+1  ar가 가리키는 객체의 크기를 알아야함
따라서 int ar[][4]; //ar이 4개의 int로 이루어진 배열, ar+1 : ar주소에 int 4개 만큼의 크기를 더해라


첫번째[]에 대하여 컴파일러는 무엇을 해야 할지 알지 못한다.
따라서 void dub(int ar[3][4],int n);  //3은 무시된다.


일반적으로 n차원 배열을 가리키는 포인터를 선언할 떄 첫번째 []를 제외한 나머지 []에서 반드시 값을 모두 지정해야 한다.

'c' 카테고리의 다른 글

기본 논리  (0) 2012.11.20
출력형식(printf) 변환명세와 필드값 정렬  (0) 2012.11.20
n비트에서 -a의 2의 보수 계산 방법  (0) 2012.11.15
다차원 배열과 포인터  (0) 2012.11.14
const 와 포인터  (0) 2012.11.13