C/정리

C언어 Express 10장 배열 //210513

vss121 2021. 7. 1. 20:28

-개별변수를 사용하면 번거롭기 때문에 배열을 사용하면 된다.

-한 번에 여러 개의 변수 생성 가능

-배열 vs 변수 : 배열에는 여러 개의 변수가 들어갈 수 있다.

-같은 종류의 대량의 데이터를 반복문을 사용해서 효율적이고 간편하게 처리할 수 있다.

 

for(i=0; i<5; i++) 
	grade[i] = 0;

 

-정의 : 동일한 타입의 데이터가 여러 개 저장되어 있는 데이터 저장 장소이다.

배열 이름에 번호를 붙여서 각각의 데이터들을 접근한다.

여러 개의 값을 하나의 이름으로 처리할 수 있다. (조작이 편리하다.)

-연속적인 공간에 저장, 하나의 이름을 공유하고 단지 번호만 달라 서로 관련된 데이터를 차례로 접근하여 처리할 수 있다.

 

-배열 요소/배열 원소 : 배열을 구성하는 각각의 항목 ex) s[0], s[1] …

인덱스/첨자 : 배열 요소의 번호

 

-배열의 선언

int s[10]; //10개의 정수를 저장할 수 있는 배열 s

자료형/ 배열이름 / 배열크기

인덱스는 항상 0부터 시작한다. 유효한 인덱스의 범위는 0~(배열크기-1)

int grade[5]; 
... 
grade[5] = 60; //오류! 배열의 크기를 벗어남

 

-배열 원소 접근

score[0] = 80;

 

-배열의 초기화

int scores[5] = {1,2,3,4,5} 
int scores[5] = {1,2,3} //뒤의 나머지는 0으로 초기화 
int scores[5] = {0} //모두 0 
int scores[ ] = {1,2,3,4,5} //초기 값의 개수가 배열의 크기

배열의 크기가 주어지지 않으면 자동적으로 초기값의 개수만큼 배열의 크기로 잡힌다.

배열을 지역변수로 선언하면 초기화되지 않은 배열은 쓰레기 값을 가지게 된다.

 

-배열원소의 개수 계산

int grade[] = {1,2,3,4,5,6} int i, size; size = sizeof(grade) / sizeof(grade[0]); //전체 배열의 크기를 배열 요소의 크기로 나눔 //sizeof 연산자는 크기를 바이트 단위로 계산

-배열의 복사

반복구조를 사용해서 원소를 일일이 복사해야 한다.

int i; int a[SIZE] = {1,2,3,4,5}; int b[SIZE]; for(i=0;i < SIZE; i++) b[i] = a[i];

-배열 의 비교

배열의 이름은 배열이 저장된 메모리의 주소와 같다.

for(i=0; i < SIZE ; i++) { if ( a[i] != b[i] ) { printf ("다름"); break; } }

-배열원소의 역순출력

-배열과 함수

배열도 함수로 전달할 수 있다.

(함수 호출 시에 값에 의한 호출이 이루어진다. 인수의 값이 매개 변수로 복사된다.)

배열은 사본이 아닌 원본이 저장된다. ( 주소값이 복사되어 입력되어 주소를 통해 접근되기 때문에 수정이 된다) 배열은 원본이 전달되어 호출된 함수가 배열의 요소를 수정하면 원본 배열의 내용도 수정된다.

(+배열 요소는 복사본이 전달된다)

-원본 배열의 변경을 금지하는 방법

const를 사용한다

void print_array(const int a[], int size)

※2차원 배열

int s[3][10];

2차원 배열에서 하나의 요소를 참조하려면 2개의 인덱스가 필요하다 i,j

2차원 배열은 1차원적으로 구현된다.

앞부분을 반 뒷부분을 번호라 생각

-2차원 배열의 초기화

int s[3][5] = { {0,1,2,3,4}, {0,1,2,3,4}, {0,1,2,3,4} };

int s[][5] = { {0,1,2,3,4}, {0,1,2,3,4}, {0,1,2,3,4} };

행의 개수를 지정하지 않아도 된다. 몇 개가 올 지를 적지 않아도 자동으로 숫자가 정해진다. (열의 개수는 반드시 지정) (전역변수로 선언되어 있는 경우 컴파일러가 요소들의 값을 0으로 초기화한다. 지역변수는 쓰레기 값이 들어가게 된다.)

int s[][5] = { {0,1,2}, {0,1,2}, {0,1,2} };

각 행의 나머지 2개는 0으로 초기화된다

int s[][5] = { 0,1,2,3,4,5,6,7 };

안쪽의 중괄호를 생략해도 된다

※3차원 배열

int s[6][3[5];

첫번째 인덱스 학년, 두번째~


자주 까먹는 부분

for (i = 0; i < 5; i++) printf("grade[%d]=%d\n", i, grade[i]);

for (i = 0; i < SIZE; i++) scanf("%d", &grade[i]);

sum += grade[i];

'C > 정리' 카테고리의 다른 글

[코드업] 기초100제  (0) 2022.01.25
문자열 사이즈,비교  (0) 2021.11.17
배열의 동적할당  (0) 2021.11.09
함수 호출- 문자열일 경우  (0) 2021.11.09
[C언어] &와 && 차이  (0) 2021.07.20