본문 바로가기

Programming

[C] 함수와 배열 그리고 포인터 - 1부

반응형
 배열을 사용하다가 함수에 넣을때가 있다. 이부분에서 부터 문제가 생긴다. 도대체 어쩌란 말인가~~~

int ABC = {1,2,3};
printf("sum : %d\n",sum(ABC));


이게 원하는 코드이다.
함수부분을 보면 다음과 같이 사용하면 된다.

int sum(int data[]) 또는 int sum(int *data) 이렇게 하면 된다.

물론 차이는 있다. data[] 이렇게 쓰면 값복사를 하는것이다. 함수안에서 data라는 배열이 새로 생기는 것이다.
*data 포인터로 사용하면 배열의 주소만 넘겨 받는다. 그러므로 함수안에서 배열의 값을 변경할수 있다.

여기까지는 간단하게 1차원 배열을 넘기는 방법을 설명한거고
2차원 배열을 넘기는 방법은 조금더 복잡하다.

int sum(int dataA[][])

이렇게 하면 오류난다.;;

int sum(int data[][2]) 또는 int sum(int (*data)[2]) 이렇게 두가지 방법이 존재하는것 같다.

이것도 마찬가지로 앞에 부분은 값복사이고 두번째것은 포인터로 넘긴것이다.
그리고 또 하나 생각해볼수 있는것이 있는데.. 그건 이중포인터이다.

int sum(int **data)

이와 같은 방법으로 하면 오류난다... -_-;
이게 아직 정확히 이해하지 못한 부분이네요;;

malloc를 이용하여 2중포인터 배열을 만들경우 저런 식으로 사용이 가능하다.
하지만 일반 배열을 **data로 넘기는 것은 불가능하다.

이건 좀더 알아봐야 할것 같다.
반응형