void make_key_vector(struct data_store_t *dp)
{
dp->user_vhead = malloc(sizeof(struct array_node_t) * dp->user_raw_root->count + 2); // 1부터 시작하고 마지막 널처리
dp->item_vhead = malloc(sizeof(struct array_node_t) * dp->item_raw_root->count + 2);
if (!dp->user_vhead || !dp->item_vhead) {
print_error("데이터 얼록 에러");
exit(EXIT_FAILURE);
}
push_key_vector(dp->user_raw_root, dp->user_vhead);
push_key_vector(dp->item_raw_root, dp->item_vhead);
// NULL 패턴에 의한 NIL 만들기.. while 루프 돌리기 편함
*(struct array_node_t **)(dp->user_vhead + dp->user_raw_root->count) = NULL;
*(struct array_node_t **)(dp->item_vhead + dp->item_raw_root->count) = NULL;
}
이렇게 하면 구조체 포인터를 이용할 때 while 루프를 while(p) 로 돌릴 수 있어서 편하다. 더블 포인터로 캐스팅 처리하여 위와 같이 처리하지 않으면 컴파일러가 오류낸다.
더블 포인터의 대표적인 예제.