[C++] 16. 2차원배열
2022. 5. 31. 00:08ㆍ코딩 1막 <C++개념편>
728x90
#include <iostream>
using namespace std;
void main()
{
int scoreA = 10;
int scoreB = 20;
int scoreC = 30;
// 배열 : 메모리상에서 연속적으로 나열된 상태
int scores[] = { 10, 20, 30 };
cout << "[0]의 값 : " << scores[0] << endl;
cout << "[1]의 값 : " << scores[1] << endl;
cout << "[2]의 값 : " << scores[2] << endl;
// 일반 변수들의 선언으로는 각 주소들이 규칙적이지 않다.
// 배열은 주소가 연속적으로 이루어져있다.
cout << "[0]의 주소 : " << &scores[0] << endl;
cout << "[1]의 주소 : " << &scores[1] << endl;
cout << "[2]의 주소 : " << &scores[2] << endl;
cout << endl;
int scores[] = { 10, 20, 30, 40, 50} ;
cout << scores << endl; // 첫번째 주소
cout << &scores[0] << endl; // 위와 동일
cout << scores + 1 << endl; // 두번째 주소
cout << *(scores + 1) << endl; // 두번째 주소의 값
// 캐싱 : 불필요한 연산을 줄일수 있다.
int count = sizeof(scores) / sizeof(scores[0]);
for (int i = 0; i < count; i++)
{
cout << i << "번째의 주소 : " << &scores[i] << endl;
}
int scores[] = { 2, 4, 6, 8, 10, 12, 14 } ;
int count = sizeof(scores) / sizeof(scores[0]);
for (int i = 0; i < count; i++)
{
cout << i << "번째 요소의 주소 : " << scores + i << endl;
cout << i << "번째 요소의 주소의 값 : " << * (scores + i) << endl;
cout << endl;
}
// 다중배열
// 1차원 배열
int scores[6] = {10, 20, 30, 40, 50, 60} ;
int count = sizeof(scores) / sizeof(scores[0]);
for (int i = 0; i < count; i++)
{
cout << i << "번째 요소의 주소 : " << scores + i << endl;
cout << i << "번째 요소의 주소의 값 : " << *(scores + i) << endl;
cout << endl;
}
cout << scores << endl; // 첫번째 요소의 주소
cout << *scores << endl; // 첫번째 요소의 주소의 값 = 10
cout << scores + 4 << endl; // 4번째 요소의 주소
cout << *(scores + 4) << endl; // 4번째 요소의 주소의 값 = 50
cout << endl << endl;
// 2차원 배열 : 1차원 배열에 축이 하나 더 늘어난 것
int scoresArray[2][3] =
{
{10, 20, 30},
{40, 50, 60}
};
cout << scoresArray << endl; // scoresArray[0][0] = 첫번째덩어리 주소
cout << *(scoresArray) << endl; // scoresArray[0][0] = 첫번째덩어리 주소..??
cout << *(*(scoresArray)) << endl; // *scoresArray[0][0] = 첫번째덩어리 주소의 값 = 10
cout << endl;
cout << *(scoresArray) + 1 << endl; // scoresArray[0][1] = 첫번째덩어리 주소에 4byte만큼 더한 주소 = 첫번째덩어리에서 두번째요소의 주소
cout << *(*(scoresArray) + 1) << endl; // *scoresArray[0][1] =첫번째덩어리 주소에 4byte만큼 더한 주소의 값 = 20
cout << endl;
cout << *(scoresArray) + 2 << endl; // scoresArray[0][2] = 첫번째덩어리 주소에 8byte만큼 더한 주소 = 첫번째덩어리에서 세번째요소의 주소
cout << *(*(scoresArray) + 2) << endl; // scoresArray[0][2] = 첫번째덩어리 주소에 8byte만큼 더한 주소의 값 = 30
cout << endl;
cout << scoresArray + 1 << endl; // scoresArray[1][0] = 두번째덩어리 주소 = 첫번째덩어리 주소에 12byte만큼을 더한 주소
cout << *(scoresArray + 1) << endl; // scoresArray[1][0] = 두번째덩어리 주소 = 첫번째덩어리 주소에 12byte만큼을 더한 주소..??
cout << *(scoresArray) + 3 << endl; // scoresArray[1][0] = 첫번째덩어리 주소에 12byte만큼 더한 주소 = 두번째덩어리에서 첫번째요소의 주소
cout << *(*(scoresArray) + 3) << endl; // *scoresArray[1][0] = 첫번째덩어리 주소에 12byte만큼 더한 주소의 값 = 두번째덩어리에서 첫번째요소의 주소의 값 = 40
cout << endl;
cout << *(scoresArray + 1) + 1 << endl; // scoresArray[1][1] = 두번째덩어리 주소에 4byte만큼을 더한 주소 = 첫번째덩어리 주소에 12byte을 더한 주소에 4byte를 더한 주소
cout << *(*(scoresArray + 1) + 1) << endl; // *scoresArray[1][1] = 두번째덩어리 주소에 4byte만큼을 더한 주소의 값 = 첫번째덩어리 주소에 12byte을 더한 주소에 4byte를 더한 주소의 값 = 50
cout << *(scoresArray) + 4 << endl; // scoresArray[1][1] = 첫번째덩어리 주소에 16byte만큼 더한 주소 = 두번째덩어리에서 두번째요소의 주소
cout << *(*(scoresArray) + 4) << endl; // *scoresArray[1][1] = 첫번째덩어리 주소에 16byte만큼 더한 주소의 값 = 두번째덩어리에서 두번째요소의 주소의 값 = 50
cout << endl;
cout << *(scoresArray + 1) + 2 << endl; // scoresArray[1][2] = 두번째덩어리 주소에 8byte만큼을 더한 주소 = 첫번째덩어리 주소에 12byte을 더한 주소에 8byte를 더한 주소
cout << *(*(scoresArray + 1) + 2) << endl; // *scoresArray[1][2] = 두번째덩어리 주소에 8byte만큼을 더한 주소의 값 = 첫번째덩어리 주소에 12byte을 더한 주소에 8byte를 더한 주소의 값 = 60
cout << *(scoresArray) + 5 << endl; // scoresArray[1][2] = 첫번째덩어리 주소에 20byte만큼 더한 주소 = 두번째덩어리에서 세번째요소의 주소
cout << *(*(scoresArray) + 5) << endl; // *scoresArray[1][2] = 첫번째덩어리 주소에 20byte만큼 더한 주소의 값 = 60
cout << endl;
//질문사항1. 매번 출력할때마다 주소가 바뀌는데 왜 그런것인가요?
//질문사항2. 몇차원배열까지 있는지 궁금하며, 2차원 이상에서 배열문을 작성하는게 보통 게임을 짤때 어떤식으로 응용이 될수있는지 궁금합니다.
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
{
cout << *(scoresArray + i) + j << " ";
}
cout << endl;
}
int col = sizeof(scoresArray[0]) / sizeof(int); // 2차원 배열의 가로 크기를 구할때 가로 한줄의 크기를 요소의 크기로 나눠줌
int row = sizeof(scoresArray) / sizeof(scoresArray[0]); // 2차원 배열의 세로 크기를 구할때 배열이 차지하는 전체 공간을 가로 한줄의 크기로 나눠줌
for (int i = 0; i < row; i++) // 2차원 배열의 세로 크기만큼 반복
{
for (int j = 0; j < col; j++) // 2차원 배열의 가로 크기만큼 반복
{
cout << scoresArray[i][j] << " "; // 2차원 배열의 인덱스에 변수 i, j를 지정
}
cout << endl;
}
}
728x90
'코딩 1막 <C++개념편>' 카테고리의 다른 글
[C++] 18. 구조체변수의 포인터 vs 정수형변수의 포인터 (0) | 2022.05.31 |
---|---|
[C++] 17. 구조체 (0) | 2022.05.31 |
[C++] 15. sizeof() (0) | 2022.05.31 |
[C++] 14. 배열 (0) | 2022.05.30 |
[C++] 13. 포인터변수 (0) | 2022.05.30 |