일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 간단한 앱만들어보기
- Pixel Bit Format
- Patch Cleaner
- 심도
- 조건 제어문
- 저장소와 동적메모리
- 저조도
- ASCCII
- 실생활알고리즘
- c언어
- 렌즈
- main 함수 인자 전달
- 카메라
- AppInventer
- C Mount
- Depth of Fileld
- 아이리스
- 변수
- 과초점거리
- image sensor
- 무게선별자동화
- Digital Slow Shutter
- Gain
- 이미지센서
- camera
- Zoom Lense
- 프로그래머스 lv2
- 고정비트레이트
- CS Mount
- 변수의 초기화와 대입
- Today
- Total
목록Langauge (30)
카메라 개발자 공부방(SW)
오늘 배워볼 const란 변수 메모리를 상수화 시키는 연산자입니다. 다음의 코드를 보시죠 #include int main() { const int n = 0; n = 4; } // 실행결과 // compile error occur! n이란 변수가 만들어졌지만, const에 의해서 상수화가 되었기 때문에 초기화 과정에서만 메모리에 데이터를 write 할 수 있습니다. 상수 메모리는 대입 연산이 되지 않습니다. 보통이 변수의 상수화는 1) 상수 목적으로 변수를 사용하는 경우나 2) 참조하는 메모리의 데이터를 read 만 한다면 그 때 사용됩니다. (read 할 목적이라도 포인터 주소를 알고 있기 때문에 충분히 write 할 위험이 있습니다. 그것을 막는 것입니다.) 그리고 상수화 시키는 연산은 const도 ..
오늘은 파일 입출력에 대해 공부해보겠습니다. 파일 입출력은 메모리에 데이터를 직접 쓰는 방식이 아니라, '스트림'을 활용해서 데이터를 입출력합니다. 여기서 스트림이란 1) 순서가 지켜지는 데이터의 흐름 2) 바이트의 흐름을 의미합니다. 이 스트림을 이용하면 입출력 장치뿐만 아니라 DataBase, Network와 Application과 간에 '공통된 인터페이스'로 활용할 수 있습니다. 스트림이 없다면 Application과 Network의 입출력 연동된 코드를 만들어 놔도 다른 DataBase 시스템과 연동을 할 때는 새로운 코드를 작성해야 되는 수고가 늘어납니다. 스트림을 활용한다면, 이러한 고민을 전혀 할 필요 없습니다~! C언어에서 말하는 스트림은 1) 바이트의 흐름을 나타내는 논리적인 단위 2) ..
자 오늘은 재귀 함수에 대해 공부를 해보겠습니다. 재귀 함수란 아래와 같은 형태의 함수를 의미합니다. #include // 1 line // 2 int Print() // 3 { // 4 printf("Print\n"); // 5 Print(); // 6 } // 7 // 8 int main() // 9 { // 10 Print(); // 11 return 0; // 12 } // 13 // 실행결과 // runtime error eccured 자기 자신을 호출하는 함수를 재귀 함수라고 합니다. 위의 코드는 문제가 있는데 실제로 실행해보면 11라인에서 3~6라인 다시 3~6라인 무한히 호출이 됩니다. 함수가 완전히 수행해서 종료가 돼야 Stack 메모리에서 제거가 됩니다. 하지만 위 코드는 계속 콜 하니..
다음은 함수 포인터에 대해 공부해보겠습니다. 함수가 익숙하지 않으시다면 사용자 함수 부분을 꼭 복습해주세요. 다음 코드를 보시겠습니다. #include void Print() { printf("%p\n", Print); } void Add(int x, int y) { printf("%d+%d=%d\n", x, y, x + y); } int main() { printf("%p\n", Print); printf("%p\n", Add); printf("%p\n", main); return 0; } // 실행결과 // function address // function address // function address 함수의 이름은 그 함수의 시작 주소입니다. 함수의 이름도 포인터기 때문에 포인터 변수에 저장할..
오늘은 void*에 address type에 대해 공부를 해보겠습니다. address type이 void*란 의미는 어떠한 형식의 address type도 저장시킬 수 있다는 걸 의미합니다. (다시 말하면 int*, int**, char* 이든 모두 저장시킬 수 있다는 의미인데요.) 이것이 왜 필요할까요? malloc을 생각해봅시다. malloc()은 heap 영역에 메모리 공간을 할당하고 그 시작 주소를 반환하는데요. 이 반환 type 또한 void*입니다! (익숙하지 않으시다면 저장소와 동적 메모리 파트를 꼭 복습해주세요.) 메모리의 반환은 void* 이지만 프로그래머가 원하는 목적에 따라 메모리 type을 지정해서 사용할 수 있었습니다. 컴퓨터 입장에선 메모리를 할당 했지만 사용자가 어떠한 addr..
오늘은 2차원 배열에 대해 공부를 해보겠습니다. 배열과 포인터의 사용이 익숙하지 않으시다면 앞장의 배열과 포인터 부분을 꼭 복습해주세요! 우리는 앞서 배열은 앞서 많은 변수를 다루기 위한 메모리 공간이라 배웠습니다. 그때 배웠던 배열은 1차원 배열입니다. 그림으로만 봐도 할당된 메모리 공간을 메모리가 1차원으로 저장 관리되는 것을 알 수 있는데요! 2차원 배열은 차원이 2개인 배열이라 생각해주시면 됩니다. dataType arrayName[size][size]; 앞의 인덱스는 행을 의미하고, 그 뒤의 인덱스는 열을 의미합니다. 1차원 배열을 공부할 때, 배열의 이름은 첫 번째 요소의 주소다라고 배웠습니다. 그런데 2차원의 경우도 마찬가지지만 조금은 특이한데요. int arr[4][4] = {0}; arr..