[C언어 스터디 - 01] 1차원 배열 (1D Array)
2020. 6. 21. 20:12ㆍ03. Resources/C, C++
728x90
반응형
1차원 배열
참고 문헌 (Ch36): https://dojang.io/mod/page/view.php?id=292
배열의 선언
(자료형) (배열이름)[크기] = {초기값};
int numArr[10] = {1,2,3,4,5,6,7,8,9,10}; //정수형의 값을 10개를 가지는 배열을 선언하고, 초기값을 {1,2,3,4,5,6,7,8,9,10}로 지정
int numArr2[] = {1,2,3,4,5,6,7,8,9,10}; // 크기를 선언하지 않음
// 정수형의 값을 가지는 배열인데, 초기값을 {1,2,3,4,5,6,7,8,9,10}로 지정하고, 크기도 선언한 초기값의 크기와 동일하게 지정
배열 원소 접근
(배열이름)[인덱스]
10개를 선언 => 배열의 인덱스는 0부터 9까지, 즉 첫번째 값이 0의 인덱스를 가짐
배열 원소를 0으로 초기화
(자료형) (배열이름)[크기] ={0,};
int numArr[10] = {0,};
//위와 같이 {0,}을 입력으로 주게 되면 선언한 배열의 모든 값이 0으로 바뀜
배열에 값 할당
(배열이름)[인덱스] = 값;
배열의 크기
sizeof((배열이름)) = 메모리 상에서 배열이 차지하는 전체 공간
sizeof((배열이름)) / sizeof((배열 선언에 이용한 자료형)) = 배열의 크기 (요소 개수)
반복문으로 배열 값 출력
int main()
{
int numArr[10] = { 11, 22, 33, 44, 55, 66, 77, 88, 99, 110 }; // 크기가 10인 int형 배열
// sizeof(numArr) / sizeof(int) : 배열 요소의 개수가 변해도 대응할 수 있도록
for (int i = 0; i < sizeof(numArr) / sizeof(int); i++) // 배열의 요소 개수만큼 반복
//for (int i = sizeof(numArr) / sizeof(int) - 1; i >= 0; i--) // 요소 개수 - 1부터 역순으로 반복
{
printf("%d\n", numArr[i]); // 배열의 인덱스에 반복문의 변수 i를 지정
}
return 0;
}
배열 요소의 합계
#include <stdio.h>
int main()
{
int numArr[10] = { 11, 22, 33, 44, 55, 66, 77, 88, 99, 110 }; // 크기가 10인 int형 배열
int sum = 0; // 합을 저장할 변수는 0으로 초기화 => 초기화를 안하면 처음에 쓰레기 값이 들어있기 때문에 정상적으로 합을 계산할 수 없음
for (int i = 0; i < sizeof(numArr) / sizeof(int); i++) // 배열의 요소 개수만큼 반복
{
sum += numArr[i]; // sum과 배열의 요소를 더해서 다시 sum에 저장
}
printf("%d\n", sum); // 605
return 0;
}
배열 각 요소의 값을 두 배로
전체 요소에 대해서 접근하기 위해서 반복문을 무조건 돌긴 해야한다.
#include <stdio.h>
int main()
{
int numArr[10] = { 11, 22, 33, 44, 55, 66, 77, 88, 99, 110 }; // 크기가 10인 int형 배열
for (int i = 0; i < sizeof(numArr) / sizeof(int); i++) // 배열의 요소 개수만큼 반복
{
numArr[i] *= 2; // 배열의 요소에 2를 곱해서 다시 요소에 저장
}
for (int i = 0; i < sizeof(numArr) / sizeof(int); i++) // 배열의 요소 개수만큼 반복
{
printf("%d\n", numArr[i]);
}
return 0;
}
배열을 포인터에 넣기
배열을 선언할 때 쓰인 배열이름만 단독으로 사용하는 경우, 배열 첫번째 값의 주소값이 리턴된다. 즉 배열이름은 포인터의 역할을 한다고 볼 수 있다.
#include <stdio.h>
int main()
{
int numArr[10] = { 11, 22, 33, 44, 55, 66, 77, 88, 99, 110 }; // 크기가 10인 int형 배열
int *numPtr = numArr; // 포인터에 int형 배열을 할당 (배열 이름 = 첫번째 원소의 주소값)
printf("%d\n", *numPtr); // 11: 배열의 주소가 들어있는 포인터를 역참조하면 배열의 첫 번째 요소에 접근
printf("%d\n", *numArr); // 11: 배열 자체를 역참조해도 배열의 첫 번째 요소에 접근
printf("%d\n", numPtr[5]); // 66: 배열의 주소가 들어있는 포인터는 인덱스로 접근할 수 있음
printf("%d\n", sizeof(numArr)); // 40: sizeof로 배열의 크기를 구하면 배열이 메모리에 차지하는 공간이 출력됨
printf("%d\n", sizeof(numPtr)); // 4 : sizeof로 배열의 주소가 들어있는 포인터의 크기를 구하면 포인터의 크기가 출력됨(64비트라면 8)
return 0;
}
배열을 이용해서 10진수를 2진수로 변환하기
10진수를 몫이 0이 될 때까지 2로 계속 나눈 다음 나머지를 역순으로 읽으면 2진수가 된다.
#include <stdio.h>
int main()
{
int decimal = 13; // 2진수로 바꿀 값
int binary[20] = { 0, }; // 20비트의 이진수
int position = 0; // 2진수 값이 들어갈 위치
while (1)
{
binary[position] = decimal % 2; // 2로 나누었을 때 나머지를 배열에 저장
decimal = decimal / 2; // 2로 나눈 몫을 저장
position++; // 자릿수 변경
if (decimal == 0) // 몫이 0이 되면 반복을 끝냄
break;
}
// 배열의 요소를 역순으로 출력
for (int i = position - 1; i >= 0; i--)
{
printf("%d", binary[i]);
}
printf("\n");
return 0;
}
반응형
'03. Resources > C, C++' 카테고리의 다른 글
[C언어 스터디 - 06] 구조체 멤버값 설정 (memset) (0) | 2020.06.26 |
---|---|
[C언어 스터디 - 05] 구조체와 포인터 (struct and pointer) (0) | 2020.06.25 |
[C언어 스터디 - 04] 구조체 (struct) (0) | 2020.06.24 |
[C언어 스터디 - 03] 배열과 포인터 (array and pointer) (0) | 2020.06.23 |
[C언어 스터디 - 02] 2차원 배열 (2D Array) (0) | 2020.06.22 |