반응형
배열을 사용하다가 함수에 넣을때가 있다. 이부분에서 부터 문제가 생긴다. 도대체 어쩌란 말인가~~~
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로 넘기는 것은 불가능하다.
이건 좀더 알아봐야 할것 같다.
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로 넘기는 것은 불가능하다.
이건 좀더 알아봐야 할것 같다.
반응형
'Programming' 카테고리의 다른 글
퀵정렬(quick sort) (0) | 2009.03.19 |
---|---|
오버로딩(overloading) 와 오버라이딩(overriding) (0) | 2009.03.18 |
Visual Studio 2005 or 2008 에서 C의 사용법 (0) | 2009.03.16 |
콘솔에서 잠시 멈추기 (2) | 2009.03.13 |
병합정렬 (Merge Sort) (0) | 2009.03.12 |