제어문
반복문
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;
}
배열의 특징
- 배열의 길이를 선언 할때에는 반드시 상수를 사용해야 합니다
- 배열 요소의 인덱스는 언제나 0부터 시작합니다.
- 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 |