9. 배열 (Array)
- 같은 자료형의 변수들로 이루어진 집합
(1) 배열 종류
[1] 1차원 배열
- 1차원 배열 선언
- 초깃값 X : 자료형 배열명 [배열 요소 개수];
- 초깂값 O : 자료형 배열명 [배열 요소 개수] = {초깃값};
int a[3] = {1,2};
# 3번째 요소는 0으로 초기화
- 배열 요소 개수 만큼 같은 자료형 데이터 공간 할당
- 초깃값 선언 X 시, 쓰레기값 저장
- 배열 요소 개수보다 적은 개수로 초기화하면 초깃값 없는 값들은 정수형 0, 실수형 0.0, 문자형 NULL (아스키코드 0) 로 초기화
#include <stdio.h>
int main(){
int a[3]={1,2};
int i;
for(i=0; i<3; i++)
printf('%d\n',a[i]);
return 0;
}
# 1
# 2
# 0
- 요소 개수 3개인 정수형 배열 a 선언, a[0]=1, a[1]=2로 초기화, a[2]=0 자동 초기화
- 정수형 변수 i 선언
- for문의 초기식에 따라 i 0으로 초기화, 0<3 조건 만족으로 반복문 실행 > a[0]인 1 출력
- 반복문 종료로 증감식에 따라 i 1 증가 (i=1) > 1<3 조건 만족으로 반복문 실행 > a[1]인 2 출력
- 증감식에 따라 i 1 증가 (i=2) > 2<3 조건 만족으로 반복문 실행 > a[2]인 0 출력
- 증감식 따라 i 1 증가 (i=3) > 조건 불만족으로 반복문 탈출
[2] 2차원 배열
- 2차원 배열 선언
- 초깃값 X : 자료형 배열명 [행 개수] [열 개수];
- 초깃값 O : 자료형 배열명 [행 개수] [열 개수] = {초깃값};
- 행 개수 * 열 개수 만큼 같은 자료형 데이터 공간 할당
- 초깃값 선언 X 시, 쓰레깃값 저장
- 행 개수 * 열 개수보다 적은 개수로 초기화 시, 명시되지 않은 값들은 정수형 0, 실수형 0.0, 문자형 NULL로 초기화
#include <stdio.h>
int main(){
int a[2][3]={1,2,3,4};
int i,j;
for(i=0; i<2; i++)
for(j=0; j<3; j++)
printf('%d ', a[i][j]);
return 0;
}
# 1 2 3 4 0 0
- 정수형 2차원 배열 행2*열3 선언, a[0][0]=1 / a[0][1]=2 / a[0][2]=3/ a[1][0]=4 / a[1][1]=0 / a[1][2]=0 초기화
- 정수형 변수 i, j 선언
- for 반복문 초기식에 따라 i=0으로 초기화, 0<2이므로 조건 만족 반복문 실행
- 이중 for 반복문 초기식에 따라 j=0으로 초기화, 0<3이므로 조건 만족 반복문 실행 > a[0][0] 인 1 출력
- 반복문 종료 후, 이중 for문 증감식에 따라 j 1 증가 (j=1), 1<3 조건 만족으로 반복문 실행 > a[0][1] 2 출력
- 반복문 종료 후, 이중 for문 증감식에 따라 j 1 증가 (j=2), 2<3 조건 만족 반복문 실행 > a[0][2] 3 출력
- 반복문 종료 후, 이중 for문 증감식에 따라 j 1 증가 (j=3), 조건 불만족으로 이중 for 반복문 탈출
- 1차 for 반복문 종료 후, 증감식에 따라 i 1 증가 (i=1) , 1<3 조건 만족으로 반복문 실행
- 이중 for 반복문 초기식에 따라 j=0 초기화, 0<3 조건 만족 반복문 실행 > a[1][0] 4 출력
- 반복문 종료 후, 이중 for문 증감식에 따라 j 1 증가 (j=1), 1<3 조건 만족 반복문 실행 > a[1][1] 0 출력
- 반복문 종료 후, 이중 for문 증감식에 따라 j 1 증가 (j=2), 2<3 조건 만족 반복문 실행 > a[1][2] 0 출력
- 반복문 종료 후, 이중 for문 증감식에 따라 j 1 증가 (j=3), 조건 불만족으로 이중 for 반복문 탈출
- 1차 for 반복문 종료 후, 증감식에 따라 i 1 증가 (i=2), 조건 불만족으로 1차 for 반복문 탈출
10. 문자열
(1) 1차원 배열과 문자열
- C언어 문자열은 char형 배열로 표현
- 문자열 초기화 시, 마지막에 NULL 문자 삽입되므로 ** 초기화 글자 수보다 1 이상 큰 값 ** 으로 배열 선언
- 초기화 시, 배열 크기 명시하지 않으면 문자열 문자 수 +1만큼 자동 생성
- printf 함수 사용 %s로 문자열 읽고 출력
- printf 파라미터에 문자 읽기 시작 주소 제시 > 시작 주소부터 NULL 직전 값까지 읽어서 출력
- 문자열의 주소
포인터 개념 필요
변수에 & 붙이기 OR 1차원 배열의 대괄호 값 빼고 사용
ex. int a[5];
> &a[0] = 배열 a 0번째 값 주소
> &a[3] = 배열 a 3번째 값 주소
> a = 배열 a 0번째 값 주소 = 배열 a 시작 주소
> a+3 = 배열 a 3번째 값 주소 = 대괄호에 더하기 한 값이랑 동일하다고 보면 됨
#include <stdio.h>
int main(){
char a[8]='Hello';
printf('%s\n',a);
printf('%s\n',a+1);
a[3]=NULL;
printf('%s\n',a+1);
printf('%s\n',a+4);
return 0;
}
# Hello
# ello
# el
# o
- 문자형 1차원 배열 a 선언, a[0]~a[4] ='Hello', a[5]~a[7]=NULL
- 배열 a 시작 주소부터 NULL 들어있는 구간 직전까지(=a[4]) 출력, Hello
- 배열 a 1번째 값 주소부터 NULL 까지, ello 출력
- 배열 a 3번째 값 NULL로 변경 > Hello = HelNULLo
- 배열 a 1번째 값 주소 a[1]부터 NULL 까지, el 출력
- 배열 a 4번째 값 주소 a[4]부터 NULL까지, o 출력
printf('%s\n', a); = printf('%s\n', &a[0]);
printf('%s\n',a+1); = printf('%s\n', &a[1]);
printf('%s\n', a+4); = printf('%s\n', &a[4]);
(2) 2차원 배열과 문자열
- 문자열 여러 개 정의 시, char형 2차원 배열 사용
#include<stdio.h>
int main(){
char a[2][8]={'Hello', 'hoxypot'};
printf('%s\n',a[0]);
printf('%s\n',a[1]);
printf('%s\n',a[1]+3);
a[1][4]= NULL;
printf('%s\n',a[1]+2);
return 0;
}
# Hello
# hoxypot
# ypot
# xy
- 문자형 2차원 배열 a 행2*열8 선언, a[0][0]~a[0][4] = Hello , a[1][0]~a[1][6] = hoxypot , 나머지는 null로 초기화
- a[0] 인 Hello 출력 (a[0][0]~a[0][4]까지, null 직전)
- a[1] 인 hoxypot 출력 (a[1][0]~a[1][6]까지)
- a[1][3]~ a[1][6] ypot 출력
- a[1][4] 값 null로 변경, hoxypot > hoxyNULLot
- a[1][2]~a[1][3] xy 출력
- 2차원 배열의 주소
배열 변수에 & 붙이기
OR 대괄호 하나 빼기
ex. int a[3][2];
> &a[0][0] = 배열 a의 0번째 행의 0번째 열 주소
> &a[1][2] = 배열 a의 1번째 행의 2번째 열 주소
> a[0] = 배열 a의 0번째 행의 0번째 열 주소
> a[1]+2 = 배열 a의 1번째 행의 2번째 열 주소
printf('%s\n',a[0]); = printf('%s\n', &a[0][0]);
printf('%s\n',a[1]); = printf('%s\n', &a[1][0]);
printf('%s\n',a[2]+3); = printf('%s\n', &a[2][3]);
printf('%s\n',a[1]+2); = printf('%s\n', &a[1][2]);
'WorkOut > 정보처리기사' 카테고리의 다른 글
C언어 | 포인터 (0) | 2024.03.19 |
---|---|
C언어 | 구조체와 함수 (0) | 2024.03.19 |
C언어 | 조건문과 반복문 (0) | 2024.03.18 |
C언어 | 연산자 종류와 우선 순위 (0) | 2024.03.18 |
C언어 | 전처리기, 자료형, 식별자, 변수, 표준 입출력함수 (3) | 2024.03.16 |