[C언어] 배열

이가영·2023년 8월 19일
0

C언어

목록 보기
9/16

배열의 선언과 사용

  • 같은 형태의 자료형이 많이 필요할 때 배열을 사용하면 효과적이다.

배열의 선언

  • 배열은 배열명과 변수의 개수, 변수의 자료형으로 선언한다.
                   -배열 ages-
int ages[5]; -> int int int int int 
//변수의 형태, 배열의 이름, 변수의 개수
  • 배열을 선언하면 변수의 개수만큼 연속된 기억공간을 할당한다.
  • 기억공간의 구분자 - 배열의 이름 -> 기억공간의 시작주소

배열의 사용

  • 배열의 기억공간을 사용할 때는 각 기억공간이 배열에서 차지하는 위치를 사용한다.
기억공간의 사용 -> 배열명 + 배열에서의 위치
  • 배열을 구성하는 기억공간들을 배열의 요소라고 하며, 각 요소가 배열에서 차지하는 위치를 첨자라고 한다.
  • 배열의 첨자는 0부터 시작한다.
배열명[첨자]
ages[0] ages[1] ages[2] ages[3] ages[4]
  • ages배열의 세 번째 배열요소에 데이터를 저장하고 출력할 때
int ages[5];  //배열요소의 개수는 5개
ages[2] = 20; //세 번째 배열요소에 20저장
printf("세 번째 배열요소에 저장된 값은 : %d\n", ages[2]); //저장된 값 출력
  • 배열요소에 값을 입력받을 때도 일반 변수와 같이 사용
scanf("%d", &ages[4]);
  • 첨자는 0부터 시작하므로 배열요소의 개수가 5개라면 5를 첨자로 사용 불가능
ages[5] = 20; (X) -> 주의: 컴파일 에러가 발생하지 X

배열과 반복문

  • 배열요소는 첨자로 구분되므로 반복문을 사용하면 모든 배열요소를 간단하게 참조할 수 있다.
    -ages배열의 모든 요소에 값을 입력 받는 경우
for(i=0; i<5; i++){
	scanf("%d", &ages[i]); //제어변수를 배열요소의 첨자로 사용
}

연습문제

  • 가장 큰 배열요소 값 찾기

    #참고
    1~10사이 난수 생성하기
nums[i]=(rand()%10)+1;

배열의 초기화

  • 배열을 선언하면 처음에 쓰레기값이 존재한다.
int num[5];
int i, tot=0;
for(i=0; i<5; i++){
	tot+=num[i];
}
printf("total: %d\n", tot); //쓰레기값의 합이 출력
  • 배열은 기억공간의 수가 많으므로 중괄호를 사용하여 초기값을 나열한다.
배열의 초기화
int num[5] = {1, 3, 5, 7, 9}; //순서대로 저장됨

배열의 초기화의 자동기능

  • 배열요소의 수보다 초기화 값이 적으면 남는 기억공간은 0으로 채워진다.
int num[5] = {1, 3); -> 1 3 0 0 0 
  • 배열을 선언할 때 초기화하면 배열요소의 개수를 생략할 수 있다.
int num[] = {1, 3, 5, 7, 9}; -> 1 3 5 7 9  //숫자 생략가능

유연성 있게 배열 다루기

  • 배열요소의 개수가 자동으로 계산되도록 프로그램을 작성하면 배열의 크기가 바뀌어도 프로그램을 수정할 필요가 없다.
int num[5]; -> int int int int int -> 전체 20바이트 -> int하나는 4바이트
배열요소의 개수 = sizeof(num) / sizeof(num[0]) -> 5 = 20/4
              배열 전체의 크기 / 배열요소 하나의 크기

연습문제

  • 배열에 임의의 숫자 초기화한 후 각 숫자들의 위치를 반대로 바꾸는 프로그램

문자열을 저장하는 문자배열

문자열의 선언과 사용

  • 문자배열은 기본적으로 여러 개의 문자를 저장하기 위한 char형 배열이다.
    -4개의 문자를 저장할 수 있는 문자배열의 선언
char word[4]; -> char char char char //전체 4바이트 기억공간 할당
  • 배열요소 문자를 저장하면 문자열이 만들어진다.
word[0] = 'H';
word[1] = 'I'; //HI

문자열은 널문자가 완성한다.

  • 문자배열의 마지막에 널문자('\0')가 없으면 저장된 문자열의 끝을 알 수 없다.
  • 문자배열에 문자열을 저장할 때는 항상 마지막에 끝을 표시하는 널문자('\0')를 넣어줘야 한다.
char word[50];
word[0]='H';
word[1]='I';
word[2]='\0';   //문자열의 끝을 널문자로 표시해준다.
printf("%s", word);

scanf함수를 사용한 문자열의 입력

  • 문자배열에 문자열을 입력 받을 때는 %s 변환문자열과 배열명을 scanf함수의 전달인자로 준다.
scanf("%s", word); -> 배열에 문자열을 입력한다. 
  • scanf함수로 문자열을 입력 받으면 널문자를 자동으로 채워준다.
    -word배열에 hello를 입력 받은 경우
printf("문자열을 입력하세요 : ");
scanf("%s", word); //%s니까 & 안 붙인다.

연습문제

  • 영단어 반대로 출력하는 프로그램

scanf함수로 문자열을 입력할 때 주의할 점

  • 배열의 크기보다 입력되는 문자열의 크기가 더 크면 할당되지 않은 기억공간을 침범하므로 주의해야 한다.
char word[2]; //여기에 hello를 입력한다면
이웃한 메모리 영역을 침범하게 된다.

문자배열의 초기화

  • 문자배열은 기본적으로 문자상수들로 초기화한다.
char str[10] = {'d', 'r', 'e', 'a', 'm', '\0'};
  • 초기화하고 남는 배열요소는 0으로 채워진다.
    -char형 배열요소에 0이 저장되면 널문자가 되므로 결국 남는 배열요소는 널문자로 채워지는 것이다.
  • 문자배열은 문자열상수로 직접 초기화가 가능하다.
    (단, 선언과 동시에 초기화하는 경우만 가능하다.)
char str[80] = "dream"; //배열 선언과 동시에 초기화(0)
str = "utopia"; //배열에 문자열을 바로 대입할 수 없다.(x)

연습문제

  • 문자 복사 프로그램
profile
gy’s portfolio

0개의 댓글