배열 C++ | 선언 | 초기화 | 배열 예제에 대한 포인터
배열이란 무엇입니까?
배열은 동일한 데이터 유형의 요소를 순차적으로 저장하는 데이터 구조입니다. 에이 C++ 배열은 고정된 크기를 가집니다.
배열은 유사한 데이터 유형의 변수 모음으로 볼 수 있습니다. 각 변수를 선언하고 개별적으로 값을 할당하는 대신 하나의 변수(배열)를 선언하고 여기에 다양한 변수의 값을 추가할 수 있습니다. 배열에 추가된 각 값은 인덱스로 식별됩니다.
왜 배열이 필요한가요?
배열 모든 프로그래밍 언어에서 매우 중요합니다. 이는 변수나 유사한 데이터 유형의 데이터 모음을 별도로 저장하는 대신 함께 저장하는 보다 편리한 방법을 제공합니다. 배열의 각 값은 개별적으로 액세스됩니다.
배열을 선언하세요. C++
배열 선언 C++ 배열에 의해 저장될 요소의 수와 유형을 명시하는 작업이 포함됩니다. 통사론:
type array-Name [ array-Size ];
1차원 배열 선언 규칙 C++.
- 유형: 유형은 배열에 저장될 요소의 유형이며 유효한 형식이어야 합니다. C++ 데이터 형식.
- 배열 이름: array-Name은 어레이에 할당될 이름입니다.
- 배열 크기: array-Size는 배열에 저장될 요소의 수입니다. 정수여야 하며 0보다 커야 합니다.
예를 들어 age라는 배열을 만들고 다음과 같이 학생 5명의 나이를 저장할 수 있습니다.
int age[5];
age 배열은 다양한 학생의 나이를 나타내는 5개의 정수를 저장합니다.
어레이 초기화
배열 초기화는 배열에 요소를 할당/저장하는 프로세스입니다. 초기화는 단일 명령문으로 수행하거나 하나씩 수행할 수 있습니다. 배열의 첫 번째 요소는 인덱스 0에 저장되고 마지막 요소는 인덱스 n-1에 저장됩니다. 여기서 n은 배열의 총 요소 수입니다.
age 배열의 경우 첫 번째 요소는 인덱스 0에 저장되고 마지막 요소는 인덱스 4에 저장됩니다.
age 배열을 사용하여 배열 초기화가 수행되는 방법을 보여드리겠습니다.
int age[5] = {19, 18, 21, 20, 17};
{ } 안의 요소의 총 개수는 [ ] 안에 명시된 값을 초과할 수 없습니다. 요소 19는 인덱스 0에, 18은 인덱스 1에, 21은 인덱스 2에, 20은 인덱스 3에, 17은 인덱스 4에 있습니다. [ ] 안에 배열에 저장할 요소 수를 명시하지 않으면 배열은 { } 내에 추가된 요소를 담을 수 있을 만큼만 커집니다. 예를 들어:
int age[] = {19, 18, 21, 20, 17};
위의 명령문은 이전 명령문과 정확히 동일한 배열을 생성합니다. 인덱스를 사용하여 하나의 요소를 배열에 할당할 수도 있습니다. 예를 들어:
age[3] = 20;
위의 명령문은 age라는 배열의 인덱스 20에 값 3을 저장합니다. 즉, 20은 4가 됩니다.th 배열의 요소입니다.
배열 유형
두 종류의가 있습니다 C++ 배열:
- XNUMX차원 배열
- 다차원 배열
- 배열에 대한 포인터
XNUMX차원 배열
데이터 항목을 1차원으로만 선형으로 배열한 배열입니다. 일반적으로 XNUMX차원 배열이라고 합니다. 통사론:
datatype array-name[size];
- array-name은 배열의 이름입니다.
- 크기는 배열에 저장할 항목의 수입니다.
예 :
#include <iostream> using namespace std; int main() { int age[5] = { 19, 18, 21, 20, 17 }; for (int x = 0; x < 5; x++) { cout <<age[x]<<"\n"; } }
출력:
다음은 코드의 스크린샷입니다.
코드 설명 :
- 코드에 iostream 헤더 파일을 포함합니다. 이를 통해 콘솔에서 읽고 쓸 수 있습니다.
- 클래스와 함수를 호출하지 않고 사용할 수 있도록 std 네임스페이스를 포함합니다.
- 프로그램의 논리를 추가해야 하는 main() 함수를 호출합니다.
- main() 함수 본문의 시작입니다.
- 5개의 정수를 저장하기 위해 age라는 배열을 선언합니다. 5개의 정수도 초기화되었습니다.
- for 루프를 사용하여 정수 변수 x를 만듭니다.
- for 루프 본문의 시작 부분입니다.
- 루프 변수 x를 사용하여 배열 age 값을 반복하고 콘솔에 인쇄합니다. “\n”은 줄바꿈 문자이며 매 반복마다 새 줄에 인쇄됩니다.
- 본체의 끝 for 루프.
- main() 함수 본문의 끝입니다.
다차원 배열
데이터 항목을 배열하여 배열의 배열을 형성하는 배열입니다. 다차원 배열은 여러 차원을 가질 수 있지만 XNUMX차원 배열과 XNUMX차원 배열이 일반적입니다. 통사론:
datatype array-name[d1][d2][d3]...[dn];
array-name은 n차원을 갖는 배열의 이름입니다. 예를 들어:
XNUMX차원 배열
2차원 배열은 1차원 배열이 있는 목록에 데이터를 저장합니다. 행과 열이 있는 행렬입니다. 2차원 배열을 선언하려면 다음 구문을 사용합니다.
type array-Name [ x ][ y ];
유형은 유효해야 합니다. C++ 데이터 유형. 2D 배열을 테이블로 봅니다. 여기서 x는 행 수를 나타내고 y는 열 수를 나타냅니다. 즉, a[x][y] 형식을 사용하여 2D 배열의 각 요소를 식별합니다. 여기서 x는 행 수이고 y는 요소가 속한 열 수입니다.
다음은 2D 배열을 초기화하는 방법의 예입니다.
int a[2][3] = { {0, 2, 1} , /* row at index 0 */ {4, 3, 7} , /* row at index 1 */ };
위의 예에는 2×2 행렬로 볼 수 있는 3D 배열이 있습니다. 2개의 행과 3개의 열이 있습니다. 요소 0은 행 인덱스 0과 열 인덱스 1의 교차점에 위치하므로 a[0][1]로 액세스할 수 있습니다. 요소 3은 다음 위치에 있으므로 a[1][2]로 액세스할 수 있습니다. 행 인덱스 1과 열 인덱스 2의 교차점입니다.
요소의 다른 행을 구별하기 위해 단순히 중괄호를 추가했다는 점에 유의하세요. 초기화는 다음과 같이 수행될 수도 있습니다.
int a[2][3] = {0, 2, 1, 4, 3, 7}; };
다음 C++ 예제는 2D 배열을 초기화하고 탐색하는 방법을 보여줍니다.
#include <iostream> using namespace std; int main() { // a 2x3 array int a[3][2] = { {0, 2}, {1, 4}, {3, 7} }; // traverse array elements for (int i=0; i<3; i++) for (int j=0; j<2; j++) { cout << "a[" <<i<< "][" <<j<< "]: "; cout << a[i][j] << endl; } return 0; }
출력:
위 코드의 스크린샷은 다음과 같습니다.
코드 설명 :
- 코드에 iostream 헤더 파일을 포함합니다. 이를 통해 콘솔에서 읽고 쓸 수 있습니다.
- 클래스와 함수를 호출하지 않고 사용할 수 있도록 std 네임스페이스를 포함합니다.
- 코드를 추가해야 하는 main() 함수를 호출합니다.
- main() 함수 본문의 시작입니다.
- 코멘트. 그만큼 C++ 컴파일러는 이것을 건너뜁니다.
- 2행 3열의 2차원 배열을 선언합니다. 항목도 배열에 추가되었습니다.
- 코멘트. 그만큼 C++ 컴파일러는 이것을 건너뜁니다.
- for 루프를 사용하여 변수를 생성합니다. 이 변수는 배열의 행 인덱스를 반복합니다.
- for 루프를 사용하여 변수 j를 만듭니다. 이 변수는 배열의 열 인덱스를 반복합니다.
- 루프 본문의 시작입니다.
- 콘솔의 대괄호 안에 변수 i와 j의 값을 출력하세요.
- 배열 a의 인덱스 [i][j]에 저장된 값을 출력합니다.
- 루프 본문의 끝입니다.
- 프로그램이 제대로 실행되면 main() 함수는 정수 값을 반환해야 합니다.
- main() 함수 본문의 끝입니다.
XNUMX차원 배열
3D 배열은 배열의 배열입니다. 3D 배열의 각 요소는 3개의 인덱스 집합으로 식별됩니다. 3D 배열의 요소에 액세스하기 위해 세 개의 for 루프를 사용합니다. 예를 들어:
#include<iostream> using namespace std; void main() { int a[2][3][2] = {{{4, 8},{2, 4},{1, 6}}, {{3, 6},{5, 4},{9, 3}}}; cout << "a[0][1][0] = " << a[0][1][0] << "\n"; cout << "a[0][1][1] = " << a[0][1][1] << "\n"; }
출력:
다음은 코드의 스크린샷입니다.
코드 설명 :
- 코드에 iostream 헤더 파일을 포함합니다. 이를 통해 콘솔에서 읽고 쓸 수 있습니다.
- 클래스와 함수를 호출하지 않고 사용할 수 있도록 std 네임스페이스를 포함합니다.
- 프로그램의 논리를 추가해야 하는 main() 함수를 호출합니다.
- main() 함수 본문의 시작입니다.
- 크기가 3x2x3인 2D 배열을 선언합니다. 배열의 값도 초기화되었습니다.
- 배열의 인덱스 [0][1][0]에 저장된 항목에 액세스하여 콘솔에 인쇄합니다.
- 배열의 인덱스 [0][1][1]에 저장된 항목에 액세스하여 콘솔에 인쇄합니다.
- main() 함수 본문의 끝입니다.
배열에 대한 포인터
A 포인터 주소를 담고 있는 변수입니다. 포인터를 사용하여 변수의 주소를 저장하는 것 외에 배열 셀의 주소를 저장하는 데 포인터를 사용할 수 있습니다. 배열의 이름은 항상 첫 번째 요소를 가리킵니다. 아래 주어진 선언을 고려하십시오.
int age[5];
age는 age라는 배열의 첫 번째 요소의 주소인 $age[0]을 가리키는 포인터입니다. 다음 예를 고려해 보세요.
#include <iostream> using namespace std; int main() { int *john; int age[5] = { 19, 18, 21, 20, 17 }; john = age; cout << john << "\n"; cout << *john; }
출력:
위 출력의 첫 번째 값은 컴퓨터 메모리에 있는 배열의 첫 번째 요소에 할당된 주소에 따라 다른 값을 반환할 수 있습니다.
다음은 코드의 스크린샷입니다.
코드 설명 :
- 코드에 iostream 헤더 파일을 포함합니다. 이를 통해 콘솔에서 읽고 쓸 수 있습니다.
- 클래스와 함수를 호출하지 않고 사용할 수 있도록 std 네임스페이스를 포함합니다.
- 프로그램의 논리를 추가해야 하는 main() 함수를 호출합니다.
- main() 함수 본문의 시작입니다.
- *john이라는 포인터 변수를 선언합니다.
- 5개의 정수를 저장하기 위해 age라는 정수 배열을 선언합니다. 정수 값도 초기화되었습니다.
- 배열 age의 첫 번째 인덱스에 저장된 항목의 주소 값을 변수 john에 할당합니다.
- 배열 age의 첫 번째 인덱스에 저장된 항목의 주소인 변수 john의 값을 인쇄합니다.
- age 배열에 저장된 첫 번째 값을 인쇄합니다.
- main() 함수 본문의 끝입니다.
배열 이름은 상수 포인터로 사용될 수 있으며 그 반대도 마찬가지입니다. 이는 *(age + 3)을 사용하여 배열 age의 인덱스 3에 저장된 값에 액세스할 수 있음을 의미합니다. 예를 들어:
#include <iostream> using namespace std; int main() { // an array of 5 elements. int age[5] = { 19, 18, 21, 20, 17 }; int *p; p = age; // output array values cout << "Using pointer: " << endl; for (int x=0; x<5; x++) { cout << "*(p + " << x << ") : "; cout << *(p + x) << endl; } cout << "Using age as address: " << endl; for (int x = 0; x < 5; x++) { cout << "*(age + " << x << ") : "; cout << *(age + x) << endl; } return 0; }
출력:
다음은 코드의 스크린샷입니다.
코드 설명 :
- 코드에 iostream 헤더 파일을 포함합니다. 이를 통해 콘솔에서 읽고 쓸 수 있습니다.
- 클래스와 함수를 호출하지 않고 사용할 수 있도록 std 네임스페이스를 포함합니다.
- main() 함수를 호출하고 main() 함수 본문의 시작을 호출합니다.
- 코멘트. 그만큼 C++ 컴파일러는 이것을 건너뜁니다.
- 5개의 정수를 저장하기 위해 age라는 배열을 선언합니다.
- 정수 포인터 생성 p.
- 배열 age의 첫 번째 요소 주소 값을 p에 할당합니다.
- 코멘트. 그만큼 C++ 컴파일러는 이것을 건너뜁니다.
- 콘솔에 일부 텍스트를 인쇄합니다.
- for 루프를 사용하여 정수 x를 만듭니다. {는 for 루프 본문의 시작을 표시합니다.
- 콘솔에 다른 텍스트와 결합된 x 값을 인쇄합니다.
- 콘솔에 *(p + x) 값을 인쇄합니다.
- for 루프 본문의 끝입니다.
- 콘솔에 일부 텍스트를 인쇄합니다.
- for 루프를 사용하여 변수 x를 만듭니다. {는 for 루프 본문의 시작을 표시합니다.
- 다른 텍스트와 함께 0에서 4까지 x 값을 인쇄합니다.
- *(age + x) 값을 출력합니다.
- for 루프 본문의 끝입니다.
- 프로그램이 성공적으로 실행되면 값을 반환합니다.
- main() 함수 본문의 끝입니다.
배열 값에 액세스
배열의 요소는 해당 인덱스를 사용하여 액세스합니다. 액세스할 요소의 인덱스는 배열 이름 바로 뒤에 있는 대괄호 [ ] 안에 추가됩니다. 예를 들어:
int john = age[2];
위의 예에서는 John의 나이가 age라는 배열의 인덱스 2에 저장되어 있다고 간단히 설명하고 있습니다. 이는 John의 나이가 3세임을 의미합니다.rd 배열 연령의 값입니다. 여기에 완전한 것이 있습니다 C++ 이 값에 액세스하고 인쇄하는 방법을 보여주는 예:
#include<iostream> using namespace std; int main() { int age[5] = { 19, 18, 21, 20, 17 }; int john = age[2]; cout << "The age of John is:"<<john; }
출력:
다음은 코드의 스크린샷입니다.
코드 설명 :
- 코드에 iostream 헤더 파일을 포함합니다. 이를 통해 콘솔에서 읽고 쓸 수 있습니다.
- 클래스와 함수를 호출하지 않고 사용할 수 있도록 std 네임스페이스를 포함합니다.
- 코드를 추가해야 하는 main() 함수를 호출합니다.
- main() 함수 본문의 시작입니다.
- 5개의 정수 요소를 저장하기 위해 age라는 배열을 선언합니다.
- 배열 age의 인덱스 2에 저장된 값에 액세스하고 해당 값을 john이라는 변수에 저장합니다.
- 다른 텍스트와 함께 콘솔에 변수 john의 값을 인쇄합니다.
어레이의 장점 C++
다음은 Array를 사용할 때의 장점/이점입니다. C++:
- 배열 요소를 쉽게 탐색할 수 있습니다.
- 배열 데이터를 쉽게 조작할 수 있습니다.
- 배열 요소는 무작위로 액세스할 수 있습니다.
- 배열은 코드 최적화를 용이하게 합니다. 따라서 더 적은 코드를 사용하여 많은 작업을 수행할 수 있습니다.
- 배열 데이터를 쉽게 정렬할 수 있습니다.
어레이의 단점 C++
- 배열의 크기는 고정되어 있습니다. 따라서 초기화 후에는 새 요소를 추가할 수 없습니다.
- 요구 사항보다 많은 메모리를 할당하면 메모리 공간이 낭비되고, 메모리 할당량이 적어 문제가 발생할 수 있습니다.
- 배열에 저장할 요소의 개수를 미리 알고 있어야 합니다.
요약
- 배열은 동일한 데이터 유형의 요소를 저장하는 데이터 구조입니다.
- 배열 요소는 순차적으로 저장됩니다.
- 배열 요소는 해당 인덱스를 사용하여 표시됩니다. 첫 번째 요소는 인덱스 0에 있고 마지막 요소는 인덱스 n-1에 있습니다. 여기서 는 배열 요소의 총 개수입니다.
- 배열 선언에는 배열 요소의 데이터 유형과 배열에 저장될 요소 수를 정의하는 작업이 포함됩니다.
- XNUMX차원 배열은 요소를 순차적으로 저장합니다.
- XNUMX차원 배열은 요소를 행과 열에 저장합니다.
- XNUMX차원 배열은 배열의 배열입니다.
- 인덱스를 사용하여 요소를 배열에 추가할 수 있습니다.
- 배열 요소는 해당 인덱스를 사용하여 액세스됩니다.
- 다차원 배열은 두 개 이상의 차원을 갖습니다.
- 배열 이름은 첫 번째 요소를 가리킵니다.
- 배열은 크기가 고정되어 있습니다. 즉, 초기화 후에는 배열에 새 요소를 추가할 수 없습니다.