Programming/C++ Language / / 2023. 7. 3. 22:20

3days

제어문

반복문

while문

while(조건식)
{
	조건식이 결과가 참인 동안 반복적으로 실행 하고자 하는 명령문
}
#include <iostream>
using namespace std;

int main(void)
{
	int i = 0, num = 5;
	
	while (i < num)
	{
		cout << "while 문이 현재 " << i + 1 << " 번째 반복 실행중입니다." << endl;
		i++; // 이 부분을 삭제하면 무한 루프에 빠지게 됨 
	}
	cout << "while 문이 종료된 후 변수 i의 값은 " << i << "입니다." << endl;
	return 0;
}

do/while 문

do {

    조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;

} while (조건식);
#include <iostream>
using namespace std;

int main(void)
{
	int i = 0, num = 3;
	
	do {
		cout << "do / while 문이 현재 " << i + 1 << " 번째 반복 수행중입니다." << endl;
		i++; // 이 부분을 삭제하면 무한 루프에 빠지게 됨 
	} while (i < num);
	cout << "do / while 문이 종료된 후 변수 i의 값은 " << i << "입니다." << endl;
	return 0;
}

for 문

for (초기식;조건식;증감식)
{
	조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
}

범위 기반의 for 문

#include <iostream>
using namespace std;

int main(void)
{
	int arr[5] = {1, 3, 5, 7, 9};
		
	for (int element : arr)
	{
		cout << element << " ";
	}
	return 0;
}

배열과 포인터

1차원 배열

타입 배열이름[배열길이];
배열 이름[0] = "배열의 초기화 과정"
타입 배열이름[배열길이] = {"한번에","초기화","가능"}
#include <iostream>
using namespace std;

int main(void)
{
	int grade[] = {85, 65, 90};					// 배열의 길이를 명시하지 않음 
	int len = sizeof(grade) / sizeof(grade[0]);	// 배열의 길이를 구하는 공식 
	
	cout << "배열 grade의 길이는 " << len << "입니다.";
	return 0;
}

배열의 특징

  1. 배열의 길이를 선언 할때에는 반드시 상수를 사용해야 합니다
  2. 배열 요소의 인덱스는 언제나 0부터 시작합니다.
  3. C++ 컴파일러는 배열의 길이를 전혀 신경 쓰지 않는다.

다차원배열

타입 배열 이름[행의 길이][열의 길이]

포인터의 개념

int n = 100;
int *ptr = &n; //포인터 선언 &는 주소 연산자고 *는 참조 연산자

포인터 연산

#include <iostream>
using namespace std;

int main(void)
{
	int arr[3] = {10, 20, 30};	// 배열 선언 
	int* ptr_arr = arr;			// 포인터에 배열의 이름을 대입함.
	
	cout << "배열의 이름을 이용하여 배열 요소에 접근 : " << arr[0] << ", " << arr[1] << ", "  << arr[2] << endl;
	cout << "    포인터를 이용하여 배열 요소에 접근 : " << ptr_arr[0] << ", " << ptr_arr[1] << ", "  << ptr_arr[2] << endl;
		
	cout << "배열의 이름을 이용한 배열의 크기 계산 : " << sizeof(arr) << endl;
	cout << "    포인터를 이용한 배열의 크기 계산 : " << sizeof(ptr_arr);
	return 0;
}
#include <iostream>
using namespace std;

int main(void)
{
	int arr[3] = {10, 20, 30};	// 배열 선언 
	
	cout << "        배열의 이름을 이용하여 배열 요소에 접근 : " << arr[0] << ", " << arr[1] << ", " << arr[2] << endl;
	cout << "배열의 이름으로 포인터 연산을 해 배열 요소에 접근 : " << *(arr+0) << ", " << *(arr+1) << ", " << *(arr+2);
	return 0;
}

메모리의 동적 할당

데이터 영역과 스택 영역에 할당 되는 메모리의 크기는 컴파일 타임에 미리 결정 됩니다. C++ 도 C에서 처럼 malloc으로 메모리를 할당 할수 있지만 보통 new 연산자와 delete 연산자를 통해 제공합니다.

new 연산자

타입* 포인터 이름 = new 타입;

첫 번째 타입은 데이터에 맞는 포인터를 선언하기 위해, 두 번째 타입은 메모리의 종류를 지정하기 위해 사용됩니다.

new 연산자를 통해 할당받은 메모리는 따로 이름이 없으므로 해당 포인터로만 접근할 수 있게 됩니다.

int* ptr1 = new int(3); //new로 메모리 공간에 할당하고 그 값을 3으로 초기
double* ptr2 = new double[3];
float* ptr3 = new float[10];

delete 연산자

delete 연산자를 사용하여, 더는 사용하지 않는 메모리를 다시 메모리 공간에 돌려줄 수 있습니다.

#include <iostream>
using namespace std;

int main(void)
{
	int* ptr_int = new int;
	*ptr_int = 100;
	
	double* ptr_double = new double;
	*ptr_double = 100.123;
	
	cout << "int형 숫자의 값은 " << *ptr_int << "입니다." << endl;
	cout << "int형 숫자의 메모리 주소는 " << ptr_int << "입니다." << endl;
	
	cout << "double형 숫자의 값은 " << *ptr_double << "입니다." << endl;	
	cout << "double형 숫자의 메모리 주소는 " << ptr_double << "입니다." << endl;
	
	delete ptr_int;
	delete ptr_double;
	return 0;
}
int* ptr1 = new int(3);
double* ptr2 = new double[3];
float* ptr3 = new float[10];
...
delete ptr1;
delete []ptr2;
delete []ptr3;

후기 : 메모리 할당이 어렵다

'Programming > C++ Language' 카테고리의 다른 글

6days  (0) 2023.07.17
5day  (0) 2023.07.07
4days  (0) 2023.07.04
2days  (0) 2023.07.03
1days  (0) 2023.06.28
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유