본문 바로가기

프로그래밍

(8)
[열혈C] 08. Part4 Chapter21 문자와 문자열 처리 함수2 표준 C 라이브러리에는 문자열에 관련된 다양한 함수를 제공한다. string.h 헤더 파일에 선언되어 있는 문자열 관련 함수들 중에서 사용 빈도가 높은 함수들을 소개한다. 21장 내용 정리2 문자열의 길이를 반환하는 strlen 함수 strlen 함수는 인자로 전달된 문자열의 길이를 반환해주는 함수이다. 인자로 문자열의 포인터를 전달받는다.전달된 포인터가 가리키는 문자열의 길이를 계산하여 반환해 주되, 문자열의 마지막에 추가되는 NULL 문자는 문자열 길이에 포함되지 않는다.리턴타입(반환형) size_t는 그냥 'unsigned int'로 생각하면 된다. 1234#include size_t strlen(const char* s)// 전달되는 문자열의 길이를 리턴cs 예제1234567891011121314..
[열혈C] 05. Part3 Chapter19 함수 포인터와 void 포인터 문법적인 이해에 돕는데 초점을 둘 것이다. 앞으로 공부해야 할 보다 수준 있는 프로그래밍 분야(알고리즘, 네트워크 프로그래밍, 시스템 프로그래밍, win32 프로그래밍 등)를 접하면서 모든 문법적 요소의 필요성을 스스로 느끼게 될 것이다. 여기서 소개하는 함수 포인터와 void 포인터 또한 그렇다! 19장 내용 정리 함수 포인터 프로그래머가 정의한 모든 함수는 프로그램 실행 시 메인 메모리(main memory)에 올라가게 된다. 메모리 상에 올라간 다음에야 실행이 가능하기 때문이다. 이 때 함수의 이름은 메모리상에 존재하는 함수의 위치를 가리키는 주소 값을 의미한다. 즉 "함수의 이름은 메모리상에 존재하는 함수의 위치를 가리키는 포인터"이다. 함수의 이름이 주소 값을 지니는 포인터라면, 함수의 이름과 ..
[열혈C] 03. Part3 Chapter16-17 내용 정리 (다차원 배열 / 포인터의 포인터) 16장 내용 정리 다차원 배열 다차원 배열이란 2차원 이상의 배열을 의미하는 것이다.2차원 배열만 개념적으로 잘 이해하고 있으면, 그 이상의 배열은 이해하기 수월하다.뿐만 아니라 3차원 이상의 배열은 일반적으로 사용되지 않는다. 2차원 배열에서 선언과 동시에 초기화하는 경우, 첫 번째 인덱스만 생략 가능하다.12int arr1[][4] = {1,2,3,4,5,6,7,8};int arr2[][2] = {1,2,3,4,5,6,7,8};cs 17장 내용 정리 더블 포인터가 가리키는 것은 싱글 포인터 더블 포인터(double pointer) 선언1int **dpcs 더블 포인터건, 싱글 포인터건 무조건 메모리 공간의 주소 값을 저장하는 변수이다.따라서 모든 포인터 변수는 4바이트 메모리 공간을 요구한다.다만 차..
[열혈C] 02. Part2 내용 정리 (포인터와 배열의 시작) 에러가 발생하면 기뻐해라!!! 지금의 에러가 그대들을 현명한 프로그래머로 이끌어 줄 것이다. 널(Null) 문자에 대한 이해 문자열을 표현할 때에는 문자열의 끝을 의미하는 '\0'을 문자열 끝에 삽입한다. 이 문자를 가리켜 널(Null) 문자라 하며, 아스키 코드 값은 0이다. 문자열 입력받기 scanf 함수는 공백(스페이스, tab, enter)을 기준으로 데이터 수를 결정짓는다. 따라서 My Sweet Home이라고 입력되면 My, Sweet, Home 세 개의 문자열을 입력한 샘이다. 포인터 메모리 공간의 주소 값을 저장하는데 사용하는 변수를 포인터라 한다. 포인터가 변수라는 것을 강조하기 위해서 '포인터 변수'라는 표현을 쓴다. 포인터는 const 키워드에 의해서 상수화되기도 한다. (뒤에서 자세..
[열혈C] 01. Part1 내용 정리 (C 언어의 기본) 연산자의 우선 순위와 결합성 C 언어의 기본 자료형 실수 자료형의 정밀도 보편적으로 정수는 int형으로 표현하는데, 실수는 보편적으로 double형을 쓴다. float형 보다는 정밀도가 높으면서 long double형 보다는 부담이 덜 되기 때문이다. double형으로 데이터를 받는 경우 서식 문자는 %lf를 사용한다. 정수형 자료형의 특성 기본 자료형 앞에 unsigned를 붙이는 경우 MSB까지도 데이터의 크기를 표현하는데 사용하게 되므로 데이터의 표현 범위가 양의 값으로 두 배가 된다. 기본 자료형 중에서도 정수형 자료형(char, short, int...)에만 붙일 수 있다. 실수형 자료형에는 붙일 수 없음에 유의하자! 리터럴 (literal) 상수 이름이 없는 상수를 가리켜 '리터럴 상수'라 한..
[뇌자극] 03. 컴퓨터 구조에 대한 세 번째 이야기 이번 장에서는 함수가 호출되는 원리와 호출이 될 때마다 할당되는 메모리 관리방식에 대해서 이야기하고자 한다. 프로그램이 실행되는 원리에 보다 근접한 내용을 언급하는 것이다. 절차적 함수 호출(Procedure Call) 지원 CPU 모델 함수가 호출되는 방식은 CPU에 따라서 차이를 보인다. 한 예로 ARM 코어에서는 ATPCS(ARM Procedure Call Standard)라는 것을 정의하였는데, 이는 함수의 전달인자와 리턴 어드레스(함수 호출이 완료되고 나면 되돌아 갈 주소)를 레지스터에 저장하기로 결정하고, 그 저장방식에 대한 표준을 정의한 것이다. 따라서 컴퓨터 구조를 이해하기 위해 설명할 모델은 이 표준을 고려하여 ARM 코어의 레지스터들도 디자인되어 있고, ARM 컴파일러도 이 표준에 맞게..
[뇌자극] 02. 컴퓨터 구조에 대한 두 번째 이야기 컴퓨터 구조의 접근방법 컴퓨터 구조에 대한 보다 근본적인 이해는, 이후에 공부하게 될 프로세스(컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램)와 쓰레드(프로세스 내에서 실행되는 흐름의 단위)를 이해하는 데도 큰 도움이 된다. 때문에 가장 일반적인 형태의 컴퓨터 구조에 대해서 함께 살펴보고자 한다. 컴퓨터를 디자인하자 디자인할 요소는 CPU이다.CPU를 구성하는 기본적인 요소 중 ALU와 Control Unit은 이미 존재한다고 가정하고 레지스터만 디자인할 것이다.시스템 프로그래머 입장에서 CPU를 보는 관점은 대부분이 레지스터에 집중되기 때문에 레지스터에 대한 이해는 아주 중요하다. 레지스터를 디자인하자 다음은 레지스터를 디자인하는데 있어서 결정해야 할 중요 요소이다. 레지스터를 몇 비트로 구성할 ..
[뇌자극] 01. 컴퓨터 구조에 대한 첫 번째 이야기 시스템 프로그래밍의 이해와 접근 컴퓨터 요소요소에 대한 내용들은 시간이 지나면 잊혀지기 마련이다. 그러나 전체적인 그림은 쉽게 잊혀지지 않을 뿐만 아니라, 다른 분야를 공부함에 있어서 보다 더 유용한 지식이 되기도 한다. 중요한 것은 "작은 그림이 아니라 큰 그림이다!" Windows 시스템 프로그래밍이란? Windows 운영체제 기반의 컴퓨터에게 일을 시키기 위한 프로그램을 구현하는 것이다.Windwos 시스템 프로그래머가 되기 위해서는 MSDN에서 제공하는 함수의 기능을 아주 정확히 이해하면 된다.Windows가 제공하는 시스템 함수들을 정확히 이해하려면 운영체제와 컴퓨터 구조를 잘 알아야 한다.결국 시스템 프로그래밍을 제대로 공부하기 위해서는 운영체제와 컴퓨터 구조를 잘 알아야 하기 때문에 컴퓨터 ..