목록ProgrammingLanguage/C (11)
모노산달로스의 행보
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/S7XHL/btsGNcSF8lH/YTxgnzC8z7ILeXUYughw00/img.png)
C programming -큐(Queue) 리눅스 환경에서 네트워크 프로그래밍을 공부하기 위해서 C언어를 다시 복습해야 할 필요성을 느꼈습니다. 따라서 이번 기회에 배열부터 전처리기까지 내용들을 정리하겠습니다. 큐란? 스택은 선형 자료구조로서 First In First OUT (FIFO) 규칙을 따릅니다. 즉, 처음에 들어온 요소가 가장 먼저 제거된다는 뜻입니다. #define MAX 10 int queue[MAX]; int front, rear; void put(int k) { // rear가 한계를 넘지 않았으면 queue[++rear] = k; } int get() { // 큐가 비어있지 않으면 return queue[front++]; } 큐의 기본적인 구현은 위와 같습니다. 스택과 마찬가지로 배열..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bQuE7q/btsGMGNgF2A/LQ05hPsxbjNATmRHh4q9P1/img.png)
C programming -스택(Stack) 리눅스 환경에서 네트워크 프로그래밍을 공부하기 위해서 C언어를 다시 복습해야 할 필요성을 느꼈습니다. 따라서 이번 기회에 배열부터 전처리기까지 내용들을 정리하겠습니다. 스택이란? 스택은 선형 자료구조로서 Last In First OUT (LIFO) 규칙을 따릅니다. 즉, 마지막에 들어온 요소가 가장 먼저 제거된다는 뜻입니다. 마치 접시들이 쌓여있는 모습이라고 생각하면 됩니다. #define MAX 10 int stack[MAX]; int top; int push(int t) { if (top >= MAX-1) { printf(“Stack overflow\n”); return -1; } stack[++top] = t; return t; } int pop() { ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cjWp8e/btsGIOelGQj/l5JYC3K1JITkBz6H5Z628K/img.png)
C programming - 연결 리스트 (Linked List) 리눅스 환경에서 네트워크 프로그래밍을 공부하기 위해서 C언어를 다시 복습해야 할 필요성을 느꼈습니다. 따라서 이번 기회에 배열부터 전처리기까지 내용들을 정리하겠습니다. 연결 리스트란? 연결리스트는 노드라고 불리는 구조체들의 체인으로 이루어져있습니다. 각 노드는 다음 노드를 가리키는 포인터를 가지고 있습니다. 연결 리스트는 삽입 삭제가 편리하고 메모리를 효율적으로 관리할 수 있습니다. 해당 포스트에서는 실제로 C언어를 통해 연결 리스트를 구현하면서 공부해보겠습니다. 연결 리스트 노드 생성과 삽입 가장 먼저 구조체 노드를 정의하겠습니다. struct node { int value; struct node *next; }; 노드는 값과 다음 노드..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cU2pJc/btsGLDaQjCZ/UtFlxOaGHsDtXRwOZT4TsK/img.png)
C programming - 동적 메모리 할당 리눅스 환경에서 네트워크 프로그래밍을 공부하기 위해서 C언어를 다시 복습해야 할 필요성을 느꼈습니다. 따라서 이번 기회에 배열부터 전처리기까지 내용들을 정리하겠습니다. 동적 메모리란? 프로세스의 메모리 구조는 위와 같이 4개로 구분됩니다. 그중에서 힙 영역은 프로그램이 실행되는 동안 동적으로 메모리를 할당할 수 있는 영역을 의미합니다. 힙 영역의 특징으로서 프로그래머가 요구할 경우 런타임 중에 동적 메모리 할당이 이루어집니다. 그렇다면 왜 동적 메모리 할당을 요청할까요? int array[5]; array[0] = 10, array[1] = 20, array[2] = 30; int array[2]; array[0] = 10, array[1] = 20, arr..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bo5kQQ/btsGHGS200i/9kagX3j9KUTzkApukZjJSK/img.png)
C programming - 구조체와 열거형 리눅스 환경에서 네트워크 프로그래밍을 공부하기 위해서 C언어를 다시 복습해야 할 필요성을 느꼈습니다. 따라서 이번 기회에 배열부터 전처리기까지 내용들을 정리하겠습니다. 구조체란? 구조체가 대체 무엇일까요? 사전적으로는 하나 이상의 변수를 묶어 그룹화 하는 사용자 정의 자료형을 의미합니다. 위 사진 처럼 Cat 이라는 구조체가 name과 breed 그리고 age이라는 멤버 변수를 가진 것 처럼 말이죠. Java와 같은 언어에서 사용하는 Class와도 유사한 점이 존재합니다. 구조체의 목적은 데이터를 하나로 모아 구조적으로 만들어 데이터 참조를 용이하게 하는 것입니다. 예를 들어 고양이의 이름을 참조하는 함수가 100개 정도 있다고 생각해봅시다. 만약 여기서 고양..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/Glln4/btsGGOK5VsK/zslsSQPUINwZYVqka4qkDk/img.png)
C programming - 표준 함수 리눅스 환경에서 네트워크 프로그래밍을 공부하기 위해서 C언어를 다시 복습해야 할 필요성을 느꼈습니다. 따라서 이번 기회에 배열부터 전처리기까지 내용들을 정리하겠습니다. 표준함수란? 표준함수에 대해서 들어보셨나요? 그 의미는 정확히 몰라도 우리는 이미 그것을 여러 번 사용하고 있었습니다. 표준함수란 C언어 라이브러리에 저장되어 있어 사용자가 헤더파일을 통해 불러와 사용할 수 있는 함수입니다. 즉, 사용자가 필요한 기능이 미리 지정되어 있어 편하게 가져다 쓸 수 있는 것들입니다. 이번 포스트에서는 간편하게 대표적인 표준함수들에 대해서 소개하겠습니다. gets() 함수와 puts() 함수 헤더파일 stdio.h에 속하는 두 함수는 문자열을 입력하고 출력하는 역할을 수행합..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bVq0Uh/btsGwsajtGw/uGHtgOIJoQSHrnPBeL71w0/img.png)
C programming - 문자열 포인터 리눅스 환경에서 네트워크 프로그래밍을 공부하기 위해서 C언어를 다시 복습해야 할 필요성을 느꼈습니다. 따라서 이번 기회에 배열부터 전처리기까지 내용들을 정리하겠습니다. 문자열이란? C언어에서 문자 상수(Character)란 작은 따음표 내에 포함된 하나의 문자를 의미합니다. 만약 여러개의 문자를 한 번에 표현하고 싶다면 어떻게 해야 할까요? 문자 상수를 여러개 저장하는 배열은 어떨까요? char array[] = {'A', 'B', 'C', 'D'}; 문자를 저장하는 배열을 만들었습니다. 배열의 요소인 A B C D 각각의 값에 접근하는 것이 가능합니다. 지금부터 공부할 문자열 또한 이러한 문자 배열과 동일하게 동작합니다. 우리는 이미 문자열(String)을 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/SzDPC/btsGusHZmjO/2qkDnRJNpelVGC5VbK4HGk/img.png)
C programming - 포인터 배열 리눅스 환경에서 네트워크 프로그래밍을 공부하기 위해서 C언어를 다시 복습해야 할 필요성을 느꼈습니다. 따라서 이번 기회에 배열부터 전처리기까지 내용들을 정리하겠습니다. 포인터와 1차원 배열 #include int main(void) { int array[3]={10, 20, 30}; int *p = NULL; p = array; printf("%x %x %x\n", p, p+0, &p[0]); printf("%x %x\n", p+1, &p[1]); printf("%x %x \n", p+2, &p[2]); printf("%d %d %d\n", *p, *(p+0), *(&p[0])); printf("%d %d\n", *(p+1), *&p[1]); printf("%d ..