일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- html
- Arduino
- list
- priority_queue
- Visual Micro
- vector
- 자료구조
- 운영체제
- Deque
- 아두이노 소스
- 시스템프로그래밍
- Array
- 컴퓨터 그래픽스
- arduino compiler
- directx
- 통계학
- set
- WinAPI
- C언어
- Algorithm
- 라인트레이서
- Stack
- c++
- stl
- map
- 수광 소자
- 아두이노
- 아두이노 컴파일러
- queue
- LineTracer
- Today
- Total
목록Programming/C (28)
Kim's Programming
동적 메모리 할당 프로그램이 실행되기 위해서는 메모리가 필요합니다. 실행 파일 자체가 메모리에 로드(Load)되어야 실행될 수 있음은 물론이고 프로그램이 작업을 위해 선언하는 변수들도 모두 메모리에 할당이 됩니다. 컴파일러는 변수의 형식에 맞게 그에 맞는 메모리 크기를 할당합니다. int 형이면 4바이트 double형은 8바이트를 할당하듯이 미리 메모리 필요량을 알려주는 할당을 정적 할당(Static Allocation)이라고 합니다. 정수형이나 실수형은 아주 작기 떄문에 이런 변수들 때문에 변수 때문에 정적 할당이 실패하는 경우는 드뭅니다. 동적 할당(Dynamic Allocation)이란 프로그램을 작성할떄 메모리 필요량을 지정하는 정적 할당과는 다르게 실행 중에(Run Time) 필요한 만큼 메모리..
포인터 연산 포인터란 메모리의 한 지점, 간단히 말해서 번지값을 가지는 변수 입니다. register형 변수를 제외한 어떤 형태의 변수든 반드시 메모리에 보관되며 모든 메모리는 번지를 가지고 있습니다. 따라서 이 변수의 번지를 가리키는 포인터 변수를 항상 선언 할 수 있습니다. 한 문장으로 만들면 다음과 같습니다. 임의의 타입 A가 있을 때 A형의 포인터 변수를 선언할 수 있다. int, char, double 등의 기본적인 데이터 타입에 대해 int *, char *, double *형의 변수를 선언할 수 있음은 물론이고 구조체, 공용체, 배열에 대해서도 포인터형을 만들 수 있습니다. 사용자가 직접 만든 타입(typedef)에 대해서도 포인터형 변수를 선언할 수 있으며 심지어는 포인터 타입에 대한 포인..
초기식 배열을 선언과 동시에 초기화할 때는 초기값의 개수가 배열 크기와 일치하는 것이 가장 이상적입니다. int ar[5] = {4,8,3,69,-7} ar 배열의 크기가 5이기 떄문에 { }괄호 속에 있는 초기값도 다섯개를 지정하였습니다. 모든 초기식이 다 이렇게 작성이 된다면 문제가 없습니다. 배열의 크기가 작다면 초기값을 다 적는 것이 별로 어렵지 않습니다. 그러나 배열이 엄청나게 크다면 그 초기값을 일일이 나열하기가 귀찮아 지고 타이핑 시간만 엄청나게 길어집니다. int ar[1000] = {1,2,3,4,0,0,0,0,0,.......................................하...} 이번 ar배열은 크기가 1000인데 앞 쪽 네 개만 1,2,3,4,로 초기화를 시키고 나머지 전..
배열의 정의 배열이란 동일한 타입을 가지는 변수들의 유한 집합입니다. 배열을 선언하는 기본 형식은 다음과 같습니다. 일반 변수 선언문과 동일하되 변수명 뒤에 [ ] 괄호(bracket)와 배열 크기 지정문이 온다는 것만 다릅니다. 배열 선언문에 [ ]괄호가 하나 있으면 1차원 두개있으면 2차원이라고 합니다. 뭐 더 있으면 더 높은 차원 배열이라고 할 수 있습니다. type 배열명[크기][크기].....; type은 어떤 타입의 변수들이 모여 있는지를 지정하는데 정수형 변수들의 모임이면 int, 실수형 변수의 모임이면 double이라고 적습니다. 기본형 외에도 포인터, 구조체, 사용자 정의형 등 임의의 타입이 모두 배열을 구성할 수 있습니다. 타입 T가 있으면 T형 배열은 언제나 가능하며 심지어 배열의 배..
수학 함수 C컴파일러는 많은 수의 표준 함수들을 제공합니다. 공통적으로 자주 사용되는 기능들을 모든 개발자들이 직접 만들어 쓰게 된다면 시간도 많이 걸리고 사회적인 낭비도 심해 질 것입니다. 물론 직접 만들어서 문제없이 쓸 수는 없지만 직접 만든것은 아무 래도 미리 만든거 보다 안정성 또는 속도도 떨어질 것이고 미리 만든 것보다는 안전성도 떨어질 것입니다. 그래서 컴파일러 제작사들은 자주 사용되는 공통적인 함수들을 미리 만들어서 컴파일러와 함꼐 배포하는데 이를 표준함수라고 하며 표준함수들의 집합을 런타임 라이브러리(CRT)라고 부릅니다. 컴파일러 제작사의 우수한 프로그래머들이 공들여 작성한 것이므로 성능이 뛰어남은 물론이고 오랫동안 다양한 프로젝트에서 테스트되었기 때문에 신뢰도 높습니다. 그래서 우리는 ..
레지스터 변수 레지스터형 변수는 전역변수, 지역변수, 정적변수와는 다른점이 있습니다. 이들은 메모리의 일부를 차지하여 구성이 되지만 레지스터 변수는 CPU의 레지스터에 저장이 됩니다. 레지스터(Register)이란 CPU내부의 부품 중 하나이며 CPU의 임시작업장 정도의 역할을 합니다. 컴퓨터가 작동함에 중심이 되는 CPU의 중간에 있는 부품이기떄문에 메모리 보다도 훨씬 빠릅니다. 보통 내부에 10~20개 정도 밖에 없는 공간이긴 하나 속도가 1/100,000,000(1억)초 정도도 걸리지 않습니다. 그래서 여기에 변수를 할당하게 되면 엄청난 속도로 호출 또한 엄청나게 빨라지게 됩니다. 하지만 예전과는 다르게 속도가 엄청 빨라져서 최근에는 일반적으로 하는것이나 큰 차이는 없다고 합니다. 정적 함수 기억 ..
전역변수와 지역변수 기억 부류(Storage Class)란 변수가 저장되는 위치에 따라서 정해지는 변수의 여러가지 성질을 의미합니다. 변수가 어디에 생성 되는가? 에 따라서 변수의 통용범위와 파괴시기들이 정해지게 됩니다. 기억 부류는 4가지가 있는데 표를 통해 알아보겠습니다. 기억 부류 전역 변수 지역 변수 정적 변수 레지스터 변수 지정자 extern auto static register 저장 장소 정적 데이터 영역 스택 정적 데이터 영역 CPU의 레지스터 선언 위치 함수의 외부 함수의 내부 함수의 내부 함수의 내부 통용 범위 프로그램 전체 함수의 내부 함수의 내부 함수의 내부 파괴 시기 프로그램 종료시 함수 종료시 프로그램 종료시 함수 종료시 초기값 0으로 초기화 초기화 되지 않음 0으로 초기화 초기화..
매크로 함수 매크로함수란 #define 전처리기를 이용하여 함수 흉내는 내는 것 입니다. 인수를 받아들일 수 있고 매크로로 실행 후 결과를 리턴한다는 것을 보면 함수와 비슷하다는 것을 볼 수 있습니다. 매크로 함수가 매크로 상수와 다른점은 함수처럼 인수를 받아 들인다는 것이고 인수 전달을 의미 하기 위해 매크로 이름 다음에 괄호를 이용하여 표기하게 됩니다. 간단한 매크로 함수는 다음과 같습니다. 1 #define twice(u) u+u; cs 인수로 전달된 i를 두번 더함으로 이 값의 2배를 계산하게 됩니다. 예를 들어 twice(4)는 4+4=8로 치환이 되기 떄문에 결과적으로는 8로써 인식을 하게됩니다. #define문이 매크로 상수를 치환하는 방식과 같은 방식으로 매크로 함수도 치환을 하게되는데 인..