학부때부터 수치계산 할때면 항상 C언어를 써 왔지만,
배열과 포인터의 등가관계에 대해서는 극히 최근에야 알게 되었다.
예를 들어서
1) double a[10]; 을 선언했다면, 배열의 이름 a는 포인터 변수이고,
그 값은 a[0]의 주소가 된다는 점이나,
2) stdlib.h 에 선언되어 있는 malloc 함수를 이용하면, 포인터로 배열을 대신할수 있다는 점 등...
다시말해서
double a[10]; 을 선언하는 것과,
double *a;
a=malloc(10*sizeof(double)); 을 선언하는 게 같다는 것.
이걸 응용해서, 다중 포인터(ex: **ptr, ***ptr)로 행렬이나 텐서변수를 만드는 방법도
삽질끝에 알아냈다. (사실 Numerical Recipes 에 나오는 건데, 원리를 몰랐다.)
이게 유용한 이유는, 어떤 함수가 행렬이나 텐서 등을 변수로 받아야 할 때가 있는데,
다중배열만 가지고는 이걸 구현하기가 힘들었다.
대신에 위에 나온 방법을 쓰면, nrow by ncolume 의 실수 행렬을 받는 함수를
function(double **ptr, int nrow, int ncolumn){ }
같은 형식으로 쉽게 구현이 가능하니까 말이다.
웬만한 C언어 텍스트에는 다 나오는 내용임에도, 야매로 배워서 모르고 있었다.
이래서 기본이 중요함... CUDA도 공부해야 되는데, 이건 또 언제하냐... -_-;
댓글을 달아 주세요