본문 바로가기

강의자료/C/C++

018. 같은 이름을 가진 변수의 집합, 배열

◈ 이 글은 강의를 위하여 제가 직접 작성한 내용입니다. 따라서 퍼가실 경우, 출처를 명확히 해주시기 바랍니다!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!


배열이란, 다수의 데이터를 다루기 위해 같은 이름으로 생성된 변수의 집합을 의미한다.
배열을 사용하면, 다수의 변수에 같은 이름으로 접근할 수 있으므로 반복문으로 데이터를 편하게 처리할 수 있다.
#include  
using namespace std;

void main()
{
	int num;
	num = 100;

	int ary[100];
	ary[0] = 100;	// 100개중 첫번째.
	ary[99] = 200;	// 100개중 마지막.

	cout << ">> 일반변수를 이용해 합계 구하기" << endl;
	int n1,n2,sum;
	cin >> n1;
	cin >> n2;
	sum = n1+n2;
	cout << n1 << endl;
	cout << n2 << endl;
	cout << sum << endl;

	cout << ">> 배열을 이용해 합계 구하기" << endl;
	int number[3];
	cin >> number[0];
	cin >> number[1];
	number[2] = number[0] + number[1];
	//cout << number[2] << endl;
	for(int i=0; i<3; i++)
	{
		cout << number[i] << endl;
	}

	cout << ">> 배열 초기화" << endl;
	int aa = 100;
	int bb[5] = {0};// = {1,2,3};	// 입력값이 부족할 경우 0이 채워지고, 입력값이 없을 경우 쓰레기값이 채워진다.
	for(int i=0; i<5; i++)
	{
		cout << bb[i] << endl;
	}
	int cc[] = {1,2,3,4,5,6,7,8,9};	// 자동으로 9개의 변수가 만들어진다.
	//int dd[];				// 에러.
	int ee[100];
	for(int i=0; i<100; i++) 
		ee[i] = i+1;

	cout << ">> 배열의 크기" << endl;
	cout << sizeof(int) << endl;		// 4
	cout << sizeof(aa) << endl;			// 4
	cout << sizeof(bb) << endl;			// 20
	cout << sizeof(cc) << endl;			// 36
	cout << sizeof(ee) << endl;			// 400

	int count_of_ee = sizeof(ee)/sizeof(int);
	int count_of_ee2 = sizeof(ee)/sizeof(ee[0]);

	int size = 5;
	//int ff[size];	// 배열의 크기는 상수만 지정할 수 있다.

	cout << ">> 주소란?" << endl;
	int aaa = 100;
	cout << aaa << endl;
	cout << &aaa << endl;

	int bbb[5] = {1,2,3,4,5};
	cout << bbb[0] << endl;
	cout << &bbb[0] << endl;	// 배열의 시작 주소.
	cout << bbb << endl;		// 배열의 시작 주소.
	cout << &bbb << endl;		// 배열의 시작 주소.

	// 특별대우를 받는 배열 -> 문자열.
	// 문자배열 -> 특별대우를 받지 않는 배열.
	char str1[] = "Academy";							// 문자열, 변수8개 생성.
	char str2[] = {'A','c','a','d','e','m','y','\0'};	// 문자열.
	char str3[] = {'A','c','a','d','e','m','y'};		// 문자배열.

	// 출력결과가 다르다고 해서 배열이름의 의미가 달라지는 것이 아니다.
	// 단지, cout이 char타입에 한해서 특별한 동작을 할 뿐이다.
	cout << str1 << endl;		// Academy
	cout << &str1[0] << endl;	// Academy
	cout << &str1[2] << endl;	// ademy
	cout << str3 << endl;		// Academy쓰레기값ㄴ이ㅏㅁㄹ
}
#연습문제 : 배열을 역순으로 저장한 후 출력해보자.
#include 
using namespace std;

#define macro 1004 // 1:1 치환.
#define mycountof(x) (sizeof(x)/sizeof(x[0])) // 매크로 함수.

void main()
{
	int num[]={1,1,0,1,0,1,1,1,1,0,1};
	int test = 11;
	//const int counts = test; // 상수가 아니다.
	const int counts = mycountof(num); // 상수이다.
	int reverse[counts]; 
	// int reverse[test]; // 상수가 아니므로 불가능.
	// int reverse[mycountof(num)]; // 상수이므로 가능.

	// 스택 : 프로그램 실행시 미리 할당되는 메모리 영역.
	// 힙 : 프로그램 실행도중 임의로 할당받을 수 있는 메모리 영역.

	// num배열에 있는 값을 fr배열에 역순으로 집어넣고,
	// reverse배열을 순서대로 출력하세요.
	int last = counts-1;
	for(int i=0; i < counts; i++)
	{
		reverse[i] = num[last-i];	//역순으로 대입
		cout << reverse[i];
	}
	cout << endl;
}