happy coding

[lecture] C언어복습.배열 본문

lecture/data structure

[lecture] C언어복습.배열

yeoonii 2022. 12. 27. 20:21

배열

배열이란 동일한 타입의 데이터가 여러 개 저장되어 있는 데이터 저장 장소를 의미한다. 배열 안에 있는 각각의 데이터들은 정수로 되어 있는 번호에 의해 접근이 가능하다. 배열을 이용하면, 여러 개의 값을 하나의 이름으로 처리할 수 있다. 여기서 배열 원소의 번호를 인덱스 라고 한다.

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

배열을 복사하려는 경우 단순히 "=" 으로 복사하면 컴파일 오류가 나기 때문에,  for 문을 이용하여 복사해야 한다.

int a[SIZE];
int b[SIZE];

b = a;	//error
for (i=0;i<SIZE;i++)
	b[i] = a[i];	//okay

배열 원소의 개수를 계산하는 경우 sizeof 함수를 이용한다.

size = sizeof(a)/sizeof(a[0]);

원본 배열의 변경을 금지하는 방법은 const ... 를 입력하는 것이다.

배열의 이름(배열명)의 의미

배열의 이름이 의미하는 것은 1. 배열 전체 2. 배열의 첫 번째 인자의 시작 주소 이다.

//arr의 주소값을 1000이라고 가정하였을 때
printf("%p", arr);	// ==> 1000

printf("%d\n", arr);	//배열의 첫 번째 인자의 시작 주소를 의미
printf("%d\n", arr[0]);	//배열명
printf("%d\n", &arr);	//주소개념에서 &를 붙인 &arr은 (24byte)의 시작주소인 1000이다.
printf("%d\n", &arr[0]);	//arr[0]라는 배열명에 &를 붙이면 그 배열 전체인 (12byte)를 의미
printf("%d\n", &arr[0][0]);	//2차원 배열에서 1을 값으로 갖는 int형 주소

배열의 이름에 &가 붙어도 "배열의 이름의 주소"가 되는 것이 아니라, 값은 배열 이름과 그대로 동일하다. arr가 배열 이름이라면 arr와 &arr은 값이 같다. 배열의 이름의 주소는 그저 배열의 이름값이다. 배열의 이름은 포인터처럼 값을 맘대로 바꿀 수 있는 그런 "변수"가 아니기 때문이다. 따라서 arr[0] = &arr[0] 이다.

정렬

정렬이란 물건을 크기순으로 오름차순이나 내림차순으로 나열하는 것이다. 주로 사전에서 사용한다.

선택정렬(selection sort)이란 정렬이 안된 숫자들 중에서 최소값을 선택하여 배열의 첫 번째 요소와 교환하는 것이다.

버블정렬(bubble sort)이란 인접한 레코드가 순서대로 되어 있지 않은 경우 교환하고, 전체가 정렬될 때까지 비교와 교환을 계속하는 것이다.

순차탐색

이진탐색(binary search)이란 정렬된 배열의 중앙에 위치한 원소와의 비교를 되풀이하는 것이다.

2차원 배열은 1차원적으로 구현된다. 여기서 첫 번째 인덱스의 크기는 적지 않아도 된다.


http://purpleoksu.blogspot.com/2017/04/c-arr1-arr01.html

 

C언어 배열/주소 개념 정리 arr+1, arr[0]+1,&arr[0]+1, &arr+1, &arr[0][0]+1 , 그리고 배열명의 두 가지 의미

포인터를 제대로 잡고가기 위해서는 배열의 정확한 개념이해가 필수적이다. 배열은 주소(address) 와 굉장히 연관이 있기에 배열 개념을 제대로 잡으면, 포인터가 좀더 쉬워질 수 있다. 먼저 2차원

purpleoksu.blogspot.com

 

Comments