본문 바로가기

c언어7

[C언어와 친구들] int argc와 char *argv[]란? WEEK07에서 tiny server가 실행되는 main 함수가 int main(int argc, char **argv){} 다음과 같이 구성되어있었다. 정확히 argc와 argv가 어떤 인자인지 알기 위해 쓰는 글이다. main함수를 포함한 모든 함수에는 인수(파라미터)를 지정할 수 있다. main 함수의 매개변수는 보통 아무것도 사용하지 않지만 다음 모양과 같은 모양으로 쓰일 수 있다. int main(void){ // 중략 } or int main(int argc, char *argv[]){ // 중략 } int main(int argc, char *argv[]) 함수에서는 윈도우나 리눅스 같은 OS 명령 프롬포트를 이용해 인자를 전달해서 작동할 수 있도록 한다. c언어에서 main 함수는 프로그램.. 2022. 11. 9.
[C언어와 친구들] 이진 탐색 트리 (BST) 이진탐색트리(Binary Search Tree, BST)란? - 모든 원소는 유일한 키 값을 갖는다. (중복 내용을 갖는 항목은 없다.) - 왼쪽 서브트리의 모든 원소들은 루트의 키보다 작은 값을 갖는다. - 오른쪽 서브트리의 모든 원소드른 루트의 키보다 큰 값을 갖는다. - 왼쪽 서브트리와 오른쪽 서브트리도 이진탐색트리이다. (재귀적으로 정의) 이진 탐색 트리에서 3가지 연산: 탐색/삽입/삭제 1) 탐색 루트 노드를 주고서 우리가 찾고 싶은 x라는 key 값을 찾는다. search(root, x) x를 root 값부터 비교해가면서 root 보다 크면 오른쪽 서브 트리를, root 보다 작으면 왼쪽 서브트리를 방문한다. 만약 x가 roo값과 같으면 바로 root를 반환한다. search 함수를 만들어보자.. 2022. 10. 24.
[C언어와 친구들] 구조체(Struct)의 멤버가 포인터일 때, 구조체 포인터 변수 선언(동적메모리할당) 구조체 포인터가 왜이렇게 헷갈릴까. 다시 복습. - 포인터란 특정한 데이터가 저장된 주소값을 보관하는 변수 - 즉, 포인터도 변수다! 구조체 포인터도 마찬가지이다. - 구조체를 가리키는 포인터를 구조체 포인터라고 한다. - 즉, 구조체 포인터도 변수다! int형 포인터는 int *ptr1; 형식으로 선언했다. 여기서, 구조체는 struct [구조체 이름]이 자료형이다. struct [구조체 이름]형 포인터는 struct student *ptr2; 형식으로 선언했다. 여기서 struct가 있기 때문에 ptr2가 구조체라고 착각할 수 있지만 😵‍💫 ptr2는 구조체를 가리키는 포인터일 뿐 절대 구조체가 아니다. 💡💡💡💡💡💡💡 구조체를 가리키는 포인터로서 일반적인 포인터의 사용 방법이 비슷하지만, 구조체 멤버.. 2022. 10. 24.
[C언어와 친구들] 구조체(Struct)와 연결리스트(Linked List) wow 0. typedef 문법 - typedef는 'type define'의 줄임 표현 - 기존 자료형 이름의 길이가 긴 경우 자료형을 재정의하여 사용하는 문법 - #define 과 비슷해 보이지만 다른 기능 - 배열, 포인터와 같은 형식도 재정의 가능 typedef int MY_DATA[5]; MY_DATA temp; // int temp[5]; 라고 선언한 것과 같음 int (*p)[5]; // 20바이트의 사용 범위를 가지는 포인터 변수 typedef int MY_DATA[5]; MY_DATA *p; // int (*p)[5]; 라고 선언한 것과 같음 1. 구조체(Struct) - 사용자 정의 자료형 정의 방법 중 한 가지 - C언어는 크기나 형식이 다른 데이터를 그룹으로 묶어 사용할 수 있도록 '구조체.. 2022. 10. 24.
[C언어와 친구들] C언어의 *포인트는 포인터 1. 포인터 - 포인터란 특정한 데이터가 저장된 주소값을 보관하는 변수 - 즉, 포인터도 변수다! - 메모리 상에 위치한 특정한 데이터의 (시작)주소값을 보관하는 변수 - 포인터 역시 변수이기에 다른 변수와 마찬가지로 형(type)을 가짐 - 즉, int형 데이터 주소값을 저장하는 포인터와 char형 데이터 주소값을 저장하는 포인터가 서로 다른다. 예를 들어, p라는 포인터가 int 데이터를 가리키고 싶다고 하면 다음과 같이 사용하면 된다. // (포인터에 주소값이 저장되는 데이터의 형)* (포인터의 이름); int* p;// 라고 하거나 // (포인터에 주소값이 저장되는 데이터의 형) *(포인터의 이름); int *p;// 로 하면 된다. 이러면 위의 포인터 p는 int형 데이터의 주소값을 저장하는 변.. 2022. 10. 24.
[C언어와 친구들] 배열 .. 너 .. 포인터랑 뭐 있어? 배열은 C언어가 제공하는 가장 기본적인 자료구조이면서, 몇 없는 ... 그냥 다(?) 없는 C언어의 자료구조 중 하나이다. 배열이란, 컴퓨터 메모리 상에 같은 타입의 변수를 연속적으로 여러 개를 한꺼번에 정의할 수 있는 방법이다. 배열의 장점은 크게 두 가지가 있다. 1) 공간 효율이 좋다. 구조가 단순하기 때문에 정보 자체를 기억하는 메모리 외에 추가로 소모하는 메모리가 전혀 없이 공간효율이 좋다. 정수형 변수 100개를 저장하는 int arr[100] 배열은 정확하게 정수 100개분만큼의 메모리만을 요구한다. 2) 검색 속도가 일정하다. 배열의 크기가 아무리 커지더라도 검색 속도가 일정한다. 배열의 첨자 연산은 포인터를 통해 시작 번지에 첨자 *요소 크기를 더하는 간단한 동작이므로 임의의 한 요소를 .. 2022. 10. 22.
[C언어와 친구들] C언어를 알아볼까 ? 하잇 ~! 1. include와 헤더파일 - 헤더파일이란? C언어의 문법을 가지고 있는 프로그램. - 헤더파일이 코드에 추가되어 있지 않다면, 컴퓨터는 아무것도 하지 못한다. 1-1) #include 이 한 줄의 문장은 'stdio.h'안에 정의되어 있는 많은 함수들을 내 코드안에 포함시켜서 프로그램으로 만들겠다.는 의미 - stdio: standard input output의 약자 (studio가 아니다 🤗) - h: 파일의 확장자, header를 나타냄 1-2) #include - 문자열 변환, 의사 난수 생성, 동적 메모리 관리 등의 함수들을 포함 - 동적 메모리 할당 함수인 mallo, calloc 함수도 이 헤더에 포함되어 있으며, 시스템 명령어나 프로세스 제어함수도 포함 #include // stdio... 2022. 10. 21.