1. Array
array는 배열로 번역되며 행렬과 유사한 구조를 가지고 있습니다.
(1) array 선언
int a[10]; //{0,0,0,0,0,0,0,0,0,0,0}
int b[5] = {1,2,3,4,5}; //{1,2,3,4,5}
char c[5] = {'a','b','c'}; //{'a,'b','c','',''}
float d[5] = {0} //{0,0,0,0,0}
구문은 위와 같습니다.
아래는 배열 출력 예제입니다.
#include <stdio.h>
int main(void) {
char c[5] = { 'a','b','c' };
for (int i = 0; i < sizeof(c); i++) {
putchar(c[i]);
}
for (int i = 0; i < sizeof(c); i++) {
printf("%d", c[i]);
}
return 0;
}
※ 배열크기는 변수를 사용할 수 없으며(가능한 컴파일러가 있긴 한데 visual studio에서는 미지원) 상수를 사용해야 합니다.
특정 위치에 저장하고 싶을 때는 a[5] = 6; 처럼 입력하면 됩니다.
만약 배열의 크기보다 적은 수의 원소를 입력하면 가장 앞부터 순서대로 저장되고 나머지에 0이 저장됩니다.(문자열의 경우 공백'')
※ a[3] = {2}; 는 틀린 구문입니다. a의 4번째 index a[3]에 2를 저장하고 싶다면 a[3] = 2; 를 입력해야 합니다.
(2) 배열원소의 접근
배열원소의 접근은 index(0부터 배열크기-1까지)를 이용합니다.
int a[10]; // ?
int b[5] = {1,2,3,4,5}; //{1,2,3,4,5}
char c[5] = {'a','b','c'}; //{'a,'b','c','',''}
float d[5] = {0} //{0,0,0,0,0}
int a[10]; 선언 후 a[10] = 10; 을 실행하면 에러가 납니다.
배열 a의 사이즈가 10이기 때문에 가능한 index는 0부터 9까지입니다.
아래는 입력한 10개의 숫자를 배열에 저장해서 역순으로 출력해주는 예제입니다.(배열 자체가 역순이 되는 건 X)
/* Reverses a series of numbers */
#include <stdio.h>
#define N 10
int main(void)
{
int a[N], i;
printf("Enter %d numbers: ", N);
for (i = 0; i < N; i++){
scanf("%d", &a[i]);
}
printf("In reverse order:");
for (i = N - 1; i >= 0; i--){
printf(" %d", a[i]);
}
printf("\n");
return 0;
}
(3) designated initializers
![](https://blog.kakaocdn.net/dn/q1VFl/btrDc8nbK6z/gPd5j8muCh6cUk37uKdREK/img.png)
특정 위치에 값을 한꺼번에 저장할 수 있습니다. (위 경우 할당되지 않은 곳에는 0이 저장됩니다.)
만약 배열의 크기가 정의되지 않았다면 가장 큰 designator를 배열의 마지막 인덱스 (크기-1)로 가져갑니다.
![](https://blog.kakaocdn.net/dn/XY8f6/btrDeeGT0lo/fLXu63arOkfOKFtUDaMrBk/img.png)
2. sizeof
sizeof 연산자는 저장공간의 크기를 바이트 수로 반환하는 연산자이며 단순히 배열의 크기를 나타내는 연산자가 아닙니다.
(1) 배열크기 계산방법 : sizeof(배열이름) / sizeof(배열원소)
![](https://blog.kakaocdn.net/dn/4AjJX/btrDeez5Qxp/lyN84OAdKGKTGcw4Q72RH1/img.png)
3. 반복되는 수가 있는지 판별하는 예제
define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
int digit_seen[10] = { 0 };
int digit;
long n;
printf("Enter a number: ");
scanf("%ld", &n);
while (n > 0) {
digit = n % 10;
if (digit_seen[digit]) {
break;
}
digit_seen[digit] = 1;
n /= 10;
}
if (n > 0) {
printf("Repeated digit\n");
}
else {
printf("No repeated digit\n");
}
return 0;
}
'개발 > C' 카테고리의 다른 글
[C언어] 다차원 배열(Multidimensional Array) (0) | 2022.05.30 |
---|---|
[C언어] 자료형 분류, getchar, putchar (0) | 2022.05.25 |
[C언어] if, else, else if, switch, break (2) | 2022.05.07 |
[C언어] 반복문 (while, do, for) (0) | 2022.05.05 |
[C언어] printf, scanf (0) | 2022.05.03 |