글

라벨이 C언어인 게시물 표시

재미삼아 만들어본 Double Linked List (이중 연결 리스트)

역시 이론으로 알고있는 것과 실제로 경험해보는 것은 큰 차이가 있다는 것을 실감. 구현하는 것은 어렵지 않았으나, 사소한 것 하나하나에 대한 궁금증이 태어남. 대표적인 것이 "Double pointer(다중 포인터)를 왜 사용하는가?"의 질문. 이에 대한 답은 지역변수의 특징과 관련이 있다는 것을 파악. 지역변수는 함수가 리턴하는 순간 함수와 함께 사라진다는 특징이 있음. 함수에 전달하는 매개변수가 포인터라 하더라도 결국은 지역변수와 비슷한 성격을 보임. 포인터 매개변수는 주소를 전달받아 그것을 가리키는 포인터로 이용한다는 특징이 있을뿐 이외에 것은 일반 변수와 같음. 잡설을 그만두고 코드를 까보자. 코드는 리스트와 테스트로 구분되있다. <이중 연결 리스트> -- list.h -- #define true 1 #define false -1 typedef struct _node { int data; struct _node* prev; struct _node* next; } node; typedef struct d_linked_list { node* head; node* tail; int count; int sorted; } d_linked_list; void del_list(d_linked_list* _list); void ins_data(int _data, d_linked_list** _list); node* search_data(int _data, d_linked_list* _list); int del_data(int _data, d_linked_list* _list); void show_all(d_linked_list* _list); -- list.c -- #include #include #include "list.h" void init_list(int _data, d_linked_list** _list) { ...

[C언어]2차원 배열을 함수 인자로 전달하기

2차원 배열을 함수로전달하는 방법을 인터넷에서 찾아보니 가장 일반적인 방법은 다음과 같았다. void func( int variable[][10] ) { } int main() {   int va[10][10];   func(va); } 하지만 이와 같은 방법은 호출할 함수에서 배열의 크기를 미리 알아야 한다는 문제가 있기 때문에 " int va[a][b] "와 같이 배열의 크기가 가변적인 상황에서는 이용하기 힘들다. 그래서 생각한 방법이 "배열의 크기가 가변적이라면 크기도 같이 보내주자"였다. 결과적으로 다음과 같은 코드가 작성됬다. void func( int b , int variable[][ b ] ) { } int main() {   int va[10][10];   func( 10 , va); } 위와 같이 코드를 작성하니 에러가 발생하지 않았으며, warning 조차도 보이지 않았으며, 배열에의 접근도 정상적으로 가능하였다.