Programming Study 썸네일형 리스트형 함수 포인터와 void 포인터 함수포인터란 - 함수의 주소 값 저장을 위한 포인터 변수를 별도로 선언할 수 있으며, 이러한 용도로 선언된 포인터 변수를 가리켜 '함수 포인터 변수'라고 한다. int SimpleFunc(int num){···············} - 반환형 : int - 매개변수 선언 : int num 함수 포인터의 형(type)은 반환형과 매개변수의 선언형태를 기준으로 구분하기로 약속 되어 있다. 그럼 위에서 지정한 SimpleFunc의 포인터 형은 "반환형이 int이고 매개변수로 int형 변수가 하나 선언된 포인터 형(type) 이다." 라고 말 할 수 있다. 함수포인터 변수의 선언 '형(Type)'이 존재하지 않는 void 포인터 void *ptr; 위와 같이 선언되는 포인터 변수를 가리켜 'void형 포인터 .. 더보기 다차원 배열과 포인터 2차원 배열 이름의 포인터 형 - 2차원 배열의 이름이 더블 포인터 형이라는 오해를 절대로 하지 말라! 배열 포인터 변수 주의! '배열 포인터'와 '포인터 배열'을 혼동하지 말자! int * whoA[4]; // 포인터 배열 int (*whoB)[4]; // 배열 포인터 whoA는 int형 포인터 변수로 이뤄진 int형 포인터 배열 선언이고, whoB는 가로길이가 4인 int형 2차원 배열을 가리키는 용도의 포인터 변수 선언이다. 2차원 배열을 함수의 인자로 전달하기 int main(void) { int arr1[2][7]; double arr2[4][5] SimpleFunc(arr1, arr2); } //arr1의 주소값을 전달받을 수 있는 매개 변수 이름을 parr1, //arr2의 주소값을 전달받을.. 더보기 포인터의 포인터 포인터의 포인터 - 포인터 변수를 가리키는 또 다른 변수를 뜻하는 것. - 흔히 '이중 포인터' 또는 '더블 포인터'라 부름. - 포인터 변수의 선언에 사용되는 *연산자를 두 개 이어서 선언 int **dptr //int형 이중 포인터 포인터 변수를 가리키는 이중 포인터 변수(더블 포인터 변수) - 포인터 변수는 종류에 상관없이 무조건 주소 값을 저장하는 변수이다. 다만 차이가 나는 것은 포인터 변수가 가리키는 대상일 뿐. int main(void) { double num = 3.14; double *ptr = # // 변수 num의 주소 값 저장 double **dptr = &ptr; // 포인터변수 ptr의 주소 값 저장 } 위 코드에서 변수 num과 포인터 변수 ptr의 차이점과 공통점을 정.. 더보기 다차원 배열 다차원 배열이란 - 2차원 이상의 배열을 의미한다. - 4차원 이상의 배열 선언을 문법적으로 허용하고 있으나 불필요하기도 하고 논리적으로 이해하기도 어려운 형태의 배열이다. - 따라서 다차원 배열은 2차원 배열과 3차원 배열을 의미하는 것으로 이해하면 된다. 배열의 선언 int arrOneDim[10] // 길이가 10인 1차원 int 형 배열 int arrTwoDim[5][5] // 가로, 세로의 길이가 각각 5인 2차원 int형 배열 int arrThreeDim[3][3][3] // 가로, 세로, 높이의 길이가 각각 3인 3차원 int형 배열 3차원 배열 - 가로, 세로 그리고 높이가 존재하는 배열 - 여러개의 2차원 배열이 모여 있는 형태로 이해하는 것이 더 합리적. - 윤성우 저, 열혈강의 C프로.. 더보기 리스트 - 이중 연결 리스트(Doubly Linked List)와 이중 연결 원형 리스트(Doubly Circular Linked List) 이중 연결 리스트 - 리스트의 각 노드가 전위 방향과 후위 방향에 대한 2개의 링크 필드 llink와 rlink로 연결된 리스트 장점 1. 리스트 검색 시 매번 첫 번째 노드로부터 검색을 시작할 필요가 없다. 2. 삽입 및 삭제 연산이나 기타 연산 등에서 선행 노드에 대한 추가적인 파라미터 전달이 필요 없게 된다. 이중 연결 리스트를 구조체로 정의 typedef struct node_type *node_ptr; typedef struct node_type { node_ptr llink; int data; node_ptr rlink; }; node_ptr list_ptr; 이중 연결 리스트의 첫 번째나 마지막 노드가 아닌 임의의 노드에 대해서 다음과 같은 관계가 성립. ptr = ptr->llink->rl.. 더보기 리스트 - 원형 연결 리스트(Circular Linked List) 단순 연결리스트의 노드 검색의 문제점을 해결하자! 원형 연결 리스트! 단순 연결 리스트는 항상 마지막 노드의 링크 필드가 NULL값을 갖는다. 이러한 리스트에서는 각 노드를 검색하기 위해서 항상 리스트의 첫 노드부터 검색이 수행되어야 하는 문제점이 있다. 이러한 문제점은 원형 연결 리스트에 의해 해결 될 수 있다. 원형연결리스트의 장점 - 어떠한 위치의 노드로부터도 리스트 전체 노드에 대한 검색이 가능하게 되는 것. 더보기 리스트 - 단순 연결 리스트(Simply Linked List) 단순 연결 리스트 - 하나의 링크 필드에 의해 각 노드들이 순차적으로 연결된 연결리스트 화살표로 표시된 각 노드의 링크 필드는 실제 다음 노드에 대한 메모리 주소 값을 갖는 포인터. 마지막 노드의 링크 필드는 더 이상의 연결된 노드가 없음을 의미하기 위해 NULL값으로. 첫번째 노드를 가리키는 포인터 변수인 list_ptr이 이 리스트에 대한 이름으로서 사용. 단순 연결 리스트의 생성 ① malloc()함수를 이용하여 하나의 노드에 대한 메모리를 할당한다. ② 리스트의 이름을 나타내는 포인터 변수가 생성된 노드를 가리키게 한다. ③ 생성된 노드의 링키 필드의 값을 NULL로 설정한다. ④ 생성된 노드의 데이터 필드를 해당 값으로 설정한다. 연결리스트에서의 노드 구조체 정의 typedef struct no.. 더보기 리스트(List) 배열을 사용한 리스트의 문제점 1. 고정된 크기에 따른 메모리 사용의 비효율성 2. 각 원소의 인접한 메모리 사용에 따른 삽입 및 삭제 연산의 비효율성 문제 3. 정해진 리스트의 크기를 동적으로 증가시킬 수 없다는 점 위에서 언급한 배열이 갖는 문제점들은 연결 리스트(Linked List)에 의해 해결 될 수 있다. 연결리스트에서 각 원소들은 배열에서와는 다르게 메모리 상에서 서로 인접해 있거나 일정한 거리만큼 떨어져 있을 필요가 없다. 또, 연결 리스트에서는 각 원소의 물리적 순서는 의미가 없다. 연결리스트에서 각원소는 반드시 값(Value, data)과 다음 원소에 해당하는 위치를 가리키는 링크(link)의 쌍으로 표현된다. 이렇게 하나의 원소를 표현하기 위한 단위를 노드(node)라고 한다. 노드는.. 더보기 포인터와 함수 함수는 인자를 전달 받도록 정의 할 수 있다. 인자전달의 기본 방식은 값의 복사이다. int SimpleFunc(int num){·····················} int main(void) { int age =17; SimpleFunc(age); //age에 저장된 값이 매개변수 num에 복사됨. } SimpleFunc 함수의 호출을 통해서 인자로 age를 전달하고 있으나 실제로 전달되는 것은 age가 아닌, age에 저장된 값! 매개변수로 배열을 선언할 수 없다..? - 배열을 통째로 넘겨받으려면 매개변수로 배열을 선언할 수 있어야 한다. 그러나 이것이 허용되지 않으니 배열을 통째로 넘기는 것은 불가능한 일이다. - 대신에 함수 내에서 배열에 접근할 수 있도록 배열의 주소 값을 전달하는 것은 가.. 더보기 포인터와 배열 배열의 이름은 무엇을 의미하는가? - 배열의 이름은 포인터이다. 단, 그 값을 바꿀 수 없는 '상수 형태의 포인터'이다. - 배열의 이름은 배열의 시작 주소 값을 의미하며, 그형태는 값의 저장이 불가능한 상수이다. 포인터변수와 배열의 비교 배열의 이름은 '상수 형태의 포인터'이다. 그래서 배열의 이름을 가리켜 '포인터 상수'라 부리기도 한다. 배열의 이름도 포인터이기 때문에 배열의 이름을 피연산자로 하는 *연산이 가능하다. 1차원 배열이름의 포인터 형과 배열이름을 대상으로 하는 *연산 - 1차원 배열이름의 포인터 형은 배열의 이름이 가리키는 대상을 기준으로 결정 int arr1[5]; //arr1은 int형 포인터 상수 double arr2[7]; //arr2는 double형 포인터 상수 포인터를 배열의.. 더보기 이전 1 ··· 3 4 5 6 7 8 9 다음