#C언어의 배열
개요
✔ 여러 데이터를 연속적인 공간에 나열하고, 해당 위치들을 첨자(Index)로 탐색
✔ 하나의 식별자로 같은 타입의 여러 데이터를 제어할 수 있다
선언
✔ 변수명 작성 규칙과 동일한 규칙 적용
✔ <타입><식별자>[<데이터개수>];
초기화
✔ <타입><식별자>[<데이터개수>] = {<값>, <값>, ...}
✔ 일부분만 초기화되는 경우 나머지는 0으로 초기화
✔ 선언과 동시에 초기화 해주는 것이 좋다.
✔ 초기화를 별도로 하는 경우, 하나씩 초기화 해야 함
#include <stdio.h>
int main()
{
//5칸 배열 생성 후 1, 6, 4, 5, 3으로 데이터 초기화
int ar[5] = {1, 6, 4, 5, 3};
//5칸 배열 생성 후 모두 0으로 데이터 초기화
int ar[5] = {0, 0, 0, 0, 0};
//5칸 배열 생성 후 첫 데이터를 0, 나머지를 0으로 데이터 초기화
int ar[5] = {0};
return 0;
}
주소상수
✔ 배열은 여러 데이터를 연달아 가지는 구조이기 때문에 배열이름 + 인덱스가 반드시 필요하다
✔ 배열 이름은 배열 데이터의 첫번째 주소값을 가지고 있고, 변경할 수 없다(상수)
✔ 주소 상수에 인덱스만큼 포인터 연산이 진행되면서 각각의 데이터가 접근할 수 있게 된다
#include <stdio.h>
int main()
{
// 5칸 배열 생성 후 1, 6, 4, 5, 3으로 데이터 초기화
int ar[5] = {1, 6, 4, 5, 3};
// 배열이름 값(주소) 출력
printf("%d \n", ar);
// ar배열의 1번째 데이터의 주소 출력(4만큼 증가한 주소값이 출력됨)
printf("%d \n", ar+1);
// ar배열의 1번째 값 출력(인덱스가 0부터 시작하므로 여기서는 6이 출력된다)
printf("%d \n", ar[1]);
return 0;
}
포인터 연산
✔ 접근하려는 데이터의 간격 단위로 주소값을 증가시켜주는 연산
✔ 예를 들어 주소가 지정되는 단위는 1바이트(byte)지만, 정수의 크기는 4byte 이므로 만약 첫번째 데이터 주소값이 100이라면, 나란히 붙은 데이터 주소값은 104가 된다. 첫번째와 두번째 데이터 주소값의 간격이 4byte이므로 이 간격만큼 주소가 증가되는 것
✔ 주소값 + N: N번째 데이터 주소값(ex. 100+1 = 101이 아니라 104가 된다)
포인터 연산자
✔ 데이터 주소값으로 직접접근이 가능한 연산자
✔ 데이터 원본 가공 가능, 포인터 연산 가능
✔ 포인터 변수는 값이 아닌 주소를 저장한다
<참조데이터타입> *<식별자>: 포인터 변수 선언
<포인터 변수> =&<데이터 변수>: 데이터 주소값 할당
*<포인터변수> = <값>: 포인터 변수가 가리키는 데이터 공간에 값을 할당
#include <stdio.h>
main(){
// 정수형 변수 생성
int date = 10;
// 포인터 변수 생성
int *p;
// 포인터 변수에 data 변수의 주소값 할당
p = &data;
// p가 가리키는 공간에 20을 할당한다
*p = 20;
// data 값 출력
printf("%d \n", data);
// p에 저장된 주소값(data주소)위치의 값 출력
printf("%d \n", *p);
// p에 저장된 주소값(data주소)출력
print("%d \n", p);
}
배열과 포인터
✔ 배열 이름은 주소상수기 때문에 주소값 재 할당 불가능
✔ 포인터 변ㅅ에 배열 이름을 할당하여 포인터 연산 가능
✔ 배열 주소를 포인터 변수에 할당하여 배열 제어 가능
#include <stdio.h>
int main()
{
int ar[5] = {1, 6, 4, 5, 3};
int *pr;
// ar(배열명)은 주소상수이므로 &을 붙일 필요 없음
pr = ar;
// ar배열의 2번째 값을 출력
printf("%d \n", ar[2]);
// pr에 저장된 주소값(ar배열)위치의 2번째 값을 출력
printf("%d \n", pr[2]);
// pr에 저장된 주소값(ar배열)위치의 2번째 값을 출력
printf("%d \n", *(pr+2));
return 0;
}
첨자(Index)
✔ 배열 요소 중 원하는 위치에 접근하기 위해 사용된다
✔ 첫 위치는 1이 아닌 0으로 시작
✔ <배열이름>[<첨자>]
for 문 활용
✔ for문을 이용하여 배열 할당, 출력 반복
✔ 인덱스 위치에 반복용 변수 활용
✔ 시작값과 종료값 설정에 주의(0부터 시작)
#include <stdio.h>
int main()
{
//반복용 변수와 배열 생성(초기화 안됨)
int i, ar[5];
//0부터 4까지 반복(초기화)
for(i=0; i<5; i++)
//ar[0] = 1;
//ar[1] = 2;
//ar[2] = 3;
//ar[3] = 4;
//ar[4] = 5;
ar[i] = i+1;
//0부터 4까지 반복(출력)
for(i=0; i<5; i++);
printf("%d", ar[i]);
return 0;
}
'2021 정보처리기사 > 참고자료: 정보처리기사' 카테고리의 다른 글
VSCode에서 C언어와 C++ 코딩 환경 세팅하기 (7) | 2021.05.02 |
---|---|
[C언어 기초] 함수 (0) | 2021.05.01 |
[C언어 기초] C언어 반복문, 제어문 (0) | 2021.04.30 |
[C언어 기초] C언어 문자열, 표준 입출력 함수 (0) | 2021.04.30 |
[C언어 기초] C언어 특징과 작성 규칙, 상수와 변수 (0) | 2021.04.26 |