728x90
배열은 둘 이상의 변수를 연속적으로 모아 놓은 것이다.
프로그램에서 지역변수 선언해주게 되면
메모리는 차곡차곡 쓰는것이 아니라, 공간상에 비어있는곳에 아무렇게나 할당된다. (무규칙하다)
그러나 배열을 통해 변수를 선언하게 되면
첫번째 주소는 무규칙 >> 두번째 주소는 첫번째 주소에 딱 붙여서 생긴다.
즉 공간을 효율적으로 사용할 수 있기 때문에 공간을 아낄 수 있다.
참고로 아래 사진에서 배열은 데이터형이 int이기 때문에 각각의 공간 하나는 4byte이다.
int numbers[5]는 4byte * 5 = 20byte를 메모리에서 차지한다.
배열의 선언방법
1) int numbers[5];
numbers[0] = 1; ~~~~~ 입력해주기
2) int numbers[5] = {1,2,3,4,5}; >> 바로 입력해주기
3) int numbers[5] = {0,} >> 하나만 입력해주기 >> 하나 입력해주면 나머지는 다 0으로 들어감.
테스트 예제
// 배열이란 무엇인지 테스트해보자
#include<iostream>
void Description003(); // 배열 테스트 함수
int main(){
Description003();
}
void Description003()
{
int numbers[5]; // 배열 선언방식 1
numbers[0] = 1; //배열의 각각의 공간에 값을 대입해주는 식
numbers[1] = 2;
numbers[2] = 3;
numbers[3] = 4;
numbers[4] = 5;
int numbers2[5] = {10, 20, 30, 40, 50}; // 배열 선언방식 2
int numbers3[5] = {0,}; // 배열 선언방식 3
//for문으로 배열에 값 대입해주기
for(int i=0; i<5;i++)
{
numbers3[i] = (i+1)*100; // numbers3의 i번째 배열공간에 (i+1)*100값 대입
}
printf("배열의 값[인덱스/값],[%d / %d]\n",0, numbers[0]);
printf("배열의 값[인덱스/값],[%d / %d]\n",1, numbers[1]);
printf("배열의 값[인덱스/값],[%d / %d]\n",2, numbers[2]);
printf("배열의 값[인덱스/값],[%d / %d]\n",3, numbers[3]);
printf("배열의 값[인덱스/값],[%d / %d]\n",4, numbers[4]);
printf("배열의 값[인덱스/값],[%d / %d]\n",0, numbers2[0]);
printf("배열의 값[인덱스/값],[%d / %d]\n",1, numbers2[1]);
printf("배열의 값[인덱스/값],[%d / %d]\n",2, numbers2[2]);
printf("배열의 값[인덱스/값],[%d / %d]\n",3, numbers2[3]);
printf("배열의 값[인덱스/값],[%d / %d]\n",4, numbers2[4]);
printf("배열의 값[인덱스/값],[%d / %d]\n",0, numbers3[0]);
printf("배열의 값[인덱스/값],[%d / %d]\n",1, numbers3[1]);
printf("배열의 값[인덱스/값],[%d / %d]\n",2, numbers3[2]);
printf("배열의 값[인덱스/값],[%d / %d]\n",3, numbers3[3]);
printf("배열의 값[인덱스/값],[%d / %d]\n",4, numbers3[4]);
}
배열로 구구단 만들기
#include <iostream>
int main()
{
int lineCount[9] = {0};
int lineCount2[9];
for(int i = 0; i < 9; i++){ // 첫 번째 숫자 배열
lineCount[i] = i+1;
for(int j= 0; j <9; j++) // 두 번째 숫자 배열
{
lineCount2[j] = j+1;
printf("%d * %d = %d\n",lineCount[i],lineCount2[j],lineCount[i]*lineCount2[j]);
}
}
}
배열을 이용해서 0을 움직이는 예제)
hard : 0**** >> *0*** >> **0** >> ***0* >> ****0
veryhard : a를 누르면 왼쪽으로, 다른키 누르면 오른쪽으로
// 문제
// hard 출력되는 0을 엔터하나 입력할때 마다 오른쪽으로 한칸씩 이동하게하기
// very hard : 위의 프로그램을 수정해서 a로 0이 왼쪽, d로 0이 오른쪽 이동 가능하도록 만들기
#include <iostream>
#include <stdlib.h>
void hard();
void hard2();
void veryHard();
int main()
{
//hard();
//hard2();
veryHard();
}
void veryHard()
{
char board[5] = {0,};
char key = '0';
// {board를 초기화 하는 로직
for(int a = 0; a<5; a++)
{
for(int i = 0; i<5; i++)
{
board[i] = '*';
if(i==a)
{
board[i] = '0';
}
}
// board를 초기화 하는 로직}
// {board를 출력하는 로직
for (int i = 0; i < 5; i++)
{
printf("%c ",board[i]);
}
std::cin>>key;
if(key == 'A' || key =='a')
{
a = a - 2;
}
printf("\n\n");
}
}
void hard2()
{
char board[5] = {0,};
// {board를 초기화 하는 로직
for(int a = 0; a<5; a++)
{
for(int i = 0; i<5; i++)
{
board[i] = '*';
if(i==a)
{
board[i] = '0';
}
}
// board를 초기화 하는 로직}
// {board를 출력하는 로직
for (int i = 0; i < 5; i++)
{
printf("%c ",board[i]);
}
getchar();
printf("\n\n");
}
}
void hard()
{
char board[5] = {0,};
int count = 1;
while(count < 6)
{
getchar();
// {board를 초기화 하는 로직
switch(count)
{
case 1:
for(int i = 0; i<5; i++)
{
board[i] = '*';
if(i==0)
{
board[i] = '0';
}
}
// board를 초기화 하는 로직}
// {board를 출력하는 로직
for (int i = 0; i < 5; i++)
{
printf("%c ",board[i]);
}
break;
case 2:
for(int i = 0; i<5; i++)
{
board[i] = '*';
if(i==1)
{
board[i] = '0';
}
}
// board를 초기화 하는 로직}
// {board를 출력하는 로직
for (int i = 0; i < 5; i++)
{
printf("%c ",board[i]);
}
break;
case 3:
for(int i = 0; i<5; i++)
{
board[i] = '*';
if(i==2)
{
board[i] = '0';
}
}
// board를 초기화 하는 로직}
// {board를 출력하는 로직
for (int i = 0; i < 5; i++)
{
printf("%c ",board[i]);
}
break;
case 4:
for(int i = 0; i<5; i++)
{
board[i] = '*';
if(i==3)
{
board[i] = '0';
}
}
// board를 초기화 하는 로직}
// {board를 출력하는 로직
for (int i = 0; i < 5; i++)
{
printf("%c ",board[i]);
}
break;
case 5:
for(int i = 0; i<5; i++)
{
board[i] = '*';
if(i==4)
{
board[i] = '0';
}
}
// board를 초기화 하는 로직}
// {board를 출력하는 로직
for (int i = 0; i < 5; i++)
{
printf("%c ",board[i]);
}
break;
// board를 출력하는 로직}
}
count++;
}
printf("\n\n");
}
728x90
'프로그래밍 > C,C++' 카테고리의 다른 글
[C/C++] 로또 번호 셔플 예제 (0) | 2023.06.07 |
---|---|
C++ 컴파일 과정 (0) | 2023.06.06 |
형변환(type casting) (0) | 2023.06.05 |
[오류_C/C++] clang: error: linker command failed with exit code 1 (use -v to see invocation) 에러 (0) | 2023.06.05 |
[C/C++]while, for, switch, rand 알아보기 (0) | 2023.06.04 |