기초 - 배열

임재현·2021년 4월 24일
0

C

목록 보기
5/10

배열

배열의 선언과 초기화

배열의 선언은 다음과 같이 할 수 있다.

자료형 배열명[배열의 크기] = {초기화 값};	//초기화 값은 없을 수도 있다.
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int zeroArray[10] = {0,}		//만약 배열의 전체 요소의 값이 0일 때. 배열의 값들이 전부 0으로 초기화가 이루어진다.[0,0,0,0,0,0,0,0,0,0]

예제

//
//  main.c
//  tutorial-sample
//
//  Created by 임재현 on 2021/04/23.
//

#include <stdio.h>
#include <limits.h> //각 자료형의 최대값이나 최소값을 알기 위한 라이브러리 헤더

int main(int argc, const char * argv[]) {
    int a[10] = {1,2,3,4,5,6,7,8,9,10};
    printf("---a---\n");
    for(int i = 0; i < 10; i++){
        printf("%d  ",a[i]);
    }
    printf("\n");
    printf("---b--- \n");
    int b[10] = {0,};
    for(int i = 0; i < 10; i++){
        printf("%d ", b[i]);
    }
    printf("\n");
    printf("---배열의 원소 중에서 최대값 찾기--- \n");
    int c[10] = {5,11, 55,3,1,6,8,9,1,2};
    int maxValue = INT_MIN;     //INT_MIN은 INT형으로 표현할 수 있는 수 중에서 가장 작은수. 최대값을 구하기 위해 자주 사용된다.
    
    for(int i = 0; i < 10; i++){
        if(maxValue < c[i]) maxValue = c[i];
    }
    printf("%d\n", maxValue);
    
    return 0;
}

문자열과 배열

  • 원시적인 C언어는 기본적으로 자체적인 문자열 자료형을 제공하지 않는다.
  • 따라서 C언어에너는 문자(Character)를 여러 개 묶어 놓는 형태로 문자열을 표현한다.
  • 기본적으로 문자열을 선언할 때는 문자열의 크기보다 배열의 크기가 크도록 해야한다.
  • 문자열을 입력 받을 때 및 출력할 때는 %s라는 형식 지정자를 사용한다.
int main(int argc, const char * argv[]) {
    char a[20];
    scanf("%s", &a);
    printf("%s\n",a);
    
    printf("--------------\n");
    
    char b[20] = "Hello World";
    b[5] = '~';
    printf("%s \n",b);
    
    printf("문자열에 포함된 \"l\"의 개수 출력하기\n");
    char c[] = "Hello World";   //특정한 문자열을 사전에 정의해서 초기화 하는 경우에는 배열의 크기를 명시해주지 않아도, 알아서 배열의 크기가 정해진다. 숫자(int)등도 마찬가지.
    int count = 0;
    for(int i = 0; i < 10; i++){
        if(c[i] == 'l'){
            printf("걸림. i = %d",i);
            count++;
        }
    }
    printf("\"ㅣ\"의 개수는 %d개 입니다.",count);
    return 0;
}

++실험으로 정해진 배열 이상의 크기를 꺼내려고 했을 때 어떻게 되나 실험해봤다.

	int d[] = {1,2,3,4,5};
    
   	for(int i = 0; i < 20; i++){
        printf("%d번째 글자 : %d \n", i,d[i]);
    }

d는 5개가 정의되어 있지만, 20까지 꺼내는 반복문을 작성해보았다. 그리고 결과는 다음과 같다.

0번째 글자 : 1 
1번째 글자 : 2 
2번째 글자 : 3 
3번째 글자 : 4 
4번째 글자 : 5 
5번째 글자 : 1819043144 
6번째 글자 : 1867980911 
7번째 글자 : 6581362 
8번째 글자 : 1819043144 
9번째 글자 : 1868004975 
10번째 글자 : 6581362 
11번째 글자 : 0 
12번째 글자 : 0 
13번째 글자 : 0 
14번째 글자 : 0 
15번째 글자 : 0 
16번째 글자 : 3420721 
17번째 글자 : 0 
18번째 글자 : 0 
19번째 글자 : 0 

제대로 정의한 1~5까지는 제대로 된 값이 나왔지만 그 다음부터는 랜덤한 값이나 0이 나왔다. 그러니깐 배열의 범위를 초과한 값에 대해서는 랜덤값이나 0이 나왔다는 소리다. 아직 포인터에 대해 배우지 않았지만, 지금 추측을 해보자면 메모리를 참조하는 부분이 넘어가서(?)그런 것 같다. 아직 확실하지 않으므로 포인터에 대해서 공부해봐야겠다.

profile
임재현입니다.

0개의 댓글