일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 렌즈
- c언어
- 프로그래머스 lv2
- Patch Cleaner
- 저조도
- Pixel Bit Format
- image sensor
- 저장소와 동적메모리
- 무게선별자동화
- 실생활알고리즘
- main 함수 인자 전달
- 고정비트레이트
- Digital Slow Shutter
- C Mount
- 아이리스
- 조건 제어문
- Depth of Fileld
- camera
- Zoom Lense
- 변수의 초기화와 대입
- 과초점거리
- 간단한 앱만들어보기
- 심도
- 카메라
- ASCCII
- Gain
- CS Mount
- AppInventer
- 이미지센서
- 변수
- Today
- Total
카메라 개발자 공부방(SW)
[11장] 배열 본문
오늘은 포인터에 이어서 배열에 대해 공부하겠습니다.
(배열과 포인터는 아주 밀접한 관계가 있기 때문에 포인터와 마찬가지로 집중해서 공부해야 될 부분입니다.)
자 그러면 배열은 무엇일까요?
배열은 연속된 메모리 공간을 의미하고, 선언해야 될 변수의 개수가 많을 때 사용됩니다.
선언해야 될 변수의 개수가 많은데, 변수를 일일이 선언하게 된다면 반복되는 코드가 많이 늘어나고 코드 관리가 어렵게 됩니다.
(코드는 가독성이 생명입니다.)
그래서 배열이 필요한 것입니다. 배열은 아래와 같이 선언할 수 있습니다.
dataType arrayName[size];
// example
int arr[5] = {};
arr이란 이름의 배열의 선언 됐고 data type은 int이며 5가개 선언됐다는 뜻입니다.
#include <stdio.h>
int main()
{
int arr[5] = {1, 2, 3, 4, 5};
printf("%d\n", arr[0]);
return 0;
}
// 실행결과
// 1
[] 연산자 굉장히 익숙하시죠? 익숙하시지 않다면 9장 변수와 주소를 보고 와주시기 바랍니다
[] 연산자 앞에는 주소가 온다고 누누이 말했죠? 눈치채셨겠지만 arr은 배열 메모리의 시작 주소를 의미합니다~!
항상 배열의 첫 번째 주소를 가리킨다는 의미에서 포인터 상수라고도 부릅니다.
#include <stdio.h>
int main()
{
int arr[5] = {1, 2, 3, 4, 5};
printf("%d %d\n", arr[0], *arr);
return 0;
}
// 실행결과
// 1
int arr[5]의 메모리를 그림으로 살펴보겠습니다.
int형 data type의 변수가 5개가 할당되었습니다. 메모리의 크기는 4byte × 5이니 20byte입니다.
배열의 시작 주소를 이용해 모든 요소에 접근할 수 있습니다.
[ ] 안의 정수를 인덱스라고 부릅니다.
(배열의 사이즈는 [] 안에 양의 정수를 넣어서 크기를 결정할 수 있고, 상수만 입력할 수 있습니다.
#include <stdio.h>
int main()
{
int arr[5] = {1, 2, 3, 4, 5};
printf("arr size: %d\n", sizeof(arr));
return 0;
}
// 실행결과
// arr size: 20
메모리의 구조는 선형적인 형태로 되어있습니다. 시작 주소를 알기 때문에 주소의 산술 연산으로 원하는 위치로 가서 메모리의 자체의 값을 읽어오고 변경시킬 수 있습니다.
#include <stdio.h>
int main()
{
int arr[5] = {1, 2, 3, 4, 5};
arr[3]= 400;
int i = 0;
for (i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
return 0;
}
// 실행결과
// 1 2 3 400 5
다음은 배열의 대입과 초기화에 대해서 이야기해보겠습니다.
#include <stdio.h>
int main()
{
int arr[5] = {1, 2, 3, 4, 5}; // { }를 이용해 초기화시킬 수 있습니다.
for (i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
return 0;
}
// 실행결과
// 1 2 3 4 5
배열의 초기화는 {}에 순차적으로 값을 입력하면 첫 번째 요소부터 차근차근 값이 할당됩니다.
#include <stdio.h>
int main()
{
int arr[5] = {1, 2} ;
for (i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
return 0;
}
// 실행결과
// 1 2 0 0 0
하지만 위와 같이 메모리 사이즈만큼 초기화되지 않으면, 나머지 부분은 0으로 채워집니다.
#include <stdio.h>
int main()
{
int arr[5];
for (i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
return 0;
}
// 실행결과
// 쓰레기 값
변수와 마찬가지로 초기화하지 않으면 배열 메모리에는 쓰레기 값이 들어갑니다.
배열을 사용할 땐 항상 초기화를 한 후, 연산을 해야 합니다.
'Langauge > C' 카테고리의 다른 글
[13장] 포인터의 포인터(pointer of pointer) (0) | 2021.10.02 |
---|---|
[12장] 포인터와 배열 (0) | 2021.10.01 |
[10장] 포인터 (0) | 2021.09.29 |
[9장] 변수와 주소 (0) | 2021.09.28 |
[8장] 사용자 함수 (0) | 2021.09.27 |