C 언어 기초 - 배열

머리말: 이번 글에서는 1차원 배열과 2차원 배열의 확장에 대해 설명하고, 실제로 적용해 보겠습니다.

목차

1. 1차원 배열

1. 1차원 배열 생성 및 초기화

(1) 배열 생성

(2) 어레이 초기화

 2. 1차원 배열의 활용

3. 메모리에 1차원 배열 저장

2. 2차원 배열

1. 2차원 배열 생성 및 초기화

(1) 배열 생성

(2) 어레이 초기화

 2. 2차원 배열의 활용

 3. 메모리에 2차원 배열 저장

3. 요약


1. 1차원 배열

1. 1차원 배열 생성 및 초기화

배열은 동일한 유형의 요소 모음입니다.

(1) 배열 생성

만드는 방법:

type_t arr_name[const_n];

type_t는 배열의 요소 유형입니다.

[const_n]은 배열의 크기를 지정하는 상수 또는 상수 표현식입니다.

예를 들어 int 및 char 유형의 배열을 만듭니다. 

int arr1[5];

int arr2[2+3];

char arr3[10];

[ ]는 상수이거나 상수 표현식이어야 합니다. 그런 다음 배열 생성을 살펴보겠습니다.

int a = 5;

int arr[a];

위 배열의 생성이 허용될 수 있습니까? ? ? 실제로 이는 C 언어 버전과 관련이 있습니다.

C99 이전에는 배열의 크기를 상수로만 지정할 수 있었지만 C99 이후에는 가변 길이 배열 의 개념을 인용하여 배열의 크기를 변수로 지정할 수 있습니다.

그러나 현재 블로거들이 사용하는 VS2019와 VS2022는 가변 길이 배열을 지원하지 않습니다 .

(2) 어레이 초기화

초기화란 배열이 생성될 때 일부 합리적인 초기값이 배열에 입력되는 것을 의미합니다. 

int arr[5];//배열의 크기를 알면 초기화 없이만 생성할 수 있습니다.

int arr1[10] = {1,2,3};//초기화가 완료되지 않았으며 나머지 요소는 기본적으로 0으로 초기화됩니다.

int arr2[] = {1,2,3,4};//크기를 알 수 없는 배열 생성 시 반드시 초기화해야 하며 기본 크기는 요소 개수입니다.

int arr3[5] = {1,2,3,4,5};//표준 초기화, 요소 수는 배열 크기와 일치합니다.

char arr4[3] = {'a',98,'c'};// 문자 초기화에는 작은따옴표를 사용해야 합니다. 숫자가 주어지면 배열의 값은 실제로 해당 ASCII 코드 값에 해당합니다. 숫자 98 과 같은 문자는 'b' 문자에 해당하므로 'b' 문자는 실제로 배열에 저장됩니다 .

char arr5[] = {'a','b','c'};//일반 문자 초기화, 만족스럽지 않으면 0을 채웁니다.

char arr6[] = "abcdef";//문자열을 직접 입력할 때는 큰따옴표를 사용하세요.

위와 같이 배열을 초기화하는 방법은 여러 가지가 있는데, 두 개의 문자 배열인 arr5와 arr6을 초기화한다는 점에 주목할 필요가 있습니다. 여기서 arr5는 단일 문자의 입력이고 arr6은 전체 문자열의 입력이므로 arr6은 arr5보다 크면 '\0'을 입력하세요.

 2. 1차원 배열의 활용

배열에 대한 연산은 첨자 참조 연산자 '[ ]' 를 통해 실현됩니다 .

위 그림에서 볼 수 있듯이 배열 요소의 실제 순서는 0부터 시작한다는 것을 알 수 있습니다 . 즉, 배열의 다섯 번째 요소를 연산하려면 arr[4]를 사용해야 합니다 . 그리고 우리는 의 첨자'4'를 .

여기서는 char형 배열을 정의하고 char형 배열도 숫자를 받을 수 있지만 숫자를 출력하려면 '%d'를 사용해야 합니다 .

 배열의 모든 요소를 ​​인쇄하려면 for 루프 만 사용하면 됩니다 .

루프에서 배열 요소를 인쇄할 때 여기에 트랩이 있습니다 . 즉, 루프 변수 'i'는 숫자 요소의 첨자 이고 배열 요소의 첨자는 요소의 실제 순서에서 1을 뺀 값 이므로 여기서 . 따라서 제약 조건은 i <= 10이 아니라 i < 10입니다 . 그렇지 않으면 중복되고 잘못된 결과가 인쇄되어 배열이 범위를 벗어나게 됩니다 .

 동시에 배열 요소의 첨자를 통해 해당 값을 수정할 수도 있습니다.

 위와 같이 '5'를 '1'로 변경합니다 .

3. 메모리에 1차원 배열 저장

#include<stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int i = 0;
	arr[4] = 1;
	for (i = 0; i < 10; i++)
	{
		printf("&arr[%d] = %p\n",i,&arr[i]);
	}
	return 0;
}

여기 모두를 위한 작은 지식 포인트가 있습니다. 데이터가 저장된 주소를 인쇄하려면 '%p'를 사용해야 합니다.

 이것으로부터 우리는 배열 첨자가 증가함에 따라 요소의 주소도 정기적으로 증가하고 각 주소가 4바이트씩 직접적으로 다르다는 것을 알 수 있으며 이는 정확히 int 유형 data가 차지하는 바이트 수 입니다 . 따라서 우리는 다음과 같은 결론을 내릴 수 있습니다.

배열은 메모리에 연속적으로 저장됩니다 .

2. 2차원 배열

2차원 배열과 1차원 배열은 큰 차이가 없는데, 2차원 배열에 대해 자세히 소개해보겠습니다.

1. 2차원 배열 생성 및 초기화

(1) 배열 생성

int arr[3][4];

문자 arr[4][5];

이중 arr[5][6];

1차원 배열이 직선이라면 2차원 배열은 직사각형입니다. 첫 번째 []는 행을 나타내고 두 번째 []는 열을 나타냅니다 .

(2) 어레이 초기화

int arr[3][4] = {1,2,3,4,5,6,7};//초기화가 완료되지 않아 행과 열의 수에 따라 순서대로 채워지며 0이 채워집니다. 가득 차지 않으면

int arr1[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};//불규칙한 초기화

int arr2[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12}};//표준 초기화, 각 행은 하나를 사용합니다. 큰 괄호

int arr3[3][4] = { {1},{2,3},{4,5,6}};//초기화가 완료되지 않았습니다. 각 줄의 빈 위치를 0으로 채웁니다.

int arr4[][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12}};//초기화할 행 수를 생략하고, 기본 줄 수에 대한 { } 숫자를 기반으로 합니다.

int arr5[3][] = { {1,2,3,4},{5,6,7,8},{9,10,11,12}};//열 번호 초기화 생략, 허용되지 않음, 오류를 보고할 것입니다

 2. 2차원 배열의 활용

2차원 배열의 사용은 첨자를 통해서도 가능합니다.

#include<stdio.h>
int main()
{
	int arr[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
	printf("%d", arr[2][3]);
	return 0;
}

이 2차원 배열의 요소 12를 인쇄하려면 아래 그림과 같이 해당 위치를 찾아야 합니다. 2행과 3열 

 그렇다면 전체 배열을 반복하고 싶다면 어떻게 해야 할까요? ? ?

매우 간단합니다. 중첩 루프를 사용하세요 .

#include<stdio.h>
int main()
{
	int arr[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
	int i = 0;
	int j = 0;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 4; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

외부 루프를 사용하여 행 수를 제어 하고 내부 루프를 사용하여 열 수를 제어하여 2차원 배열의 순회를 쉽게 구현할 수 있습니다. 인쇄 형식을 3줄로 하려면 다음과 같이 하십시오. 줄을 끊으려면 내부 루프 A '\n'의 끝에서 출력 해야 합니다 .

 3. 메모리에 2차원 배열 저장

#include<stdio.h>
int main()
{
	int arr[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
	int i = 0;
	int j = 0;
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 4; j++)
		{
			printf("&arr[%d][%d] = %p\n",i,j, &arr[i][j]);
		}
	}
	return 0;
}

1차원 배열과 마찬가지로 2차원 배열도 메모리에 어떻게 저장되는지 살펴보겠습니다.

2차원 배열의 요소도 메모리에 연속적으로 저장되며 각 행의 끝이 다음 행의 시작 부분에 연결되어 있음을  알 수 있습니다 .

친구 여러분, 2차원 배열이 메모리의 가지에 저장되어 있다는 사실을 당연하게 여기지 마십시오. 가지는 우리 상상 속의 2차원 배열을 시각화한 것일 뿐 메모리에는 존재하지 않습니다.

2차원 배열의 요소도 첨자가 증가함에 따라 증가하며, 메모리도 계속해서 증가합니다 .

3. 요약

배열 설명은 여기서 끝입니다. 블로거 글을 좋아하는 친구들은 꼭 세번 클릭 해주세요 !

다음에 또 만나요!

추천

출처blog.csdn.net/2303_78442132/article/details/132490731