본문 바로가기
GGM/자료구조

20230309 - 자료구조 - 제어구조, 함수

by DDongYeop 2023. 3. 9.
728x90

 

 

제어구조

 

 

조건문

 IF

if (조건문)
{
	명령문
}
else if 
{
	명령문
}
else 
{
	명령문
}

Switch

switch (평가식)
{
case 값1:
	명령;
    break;
case 값2:
	명령;
    break;
default: //생략가능 코드
}

break를 생력하여 break을 만날 때까지 실행한다

 

열거형

  - 프로그래머가 만든 사용자 정의형 

  - 열거형은 식별자를 값으로 저장할 수 있는 형

  - 열거형 선언 : enum 열거형명 { 식별자1, 실별자2, 식별자3, 식별자4 };

    - 식별자 1부터 4까지 0에서 3까지 정수 값을 각각 나타내는 상수로 만듦 

  - 열거형 변수의 선언 : 열거형명 열거변수명;

  - 열거형 변수에는 열거자들의 값만 대입할 수 있다. 

  - 열거자들을 상수로 관리->열거자들 간의 산술연산 적용 안됨

  - enum을 사용하면 코드 가독성을 높일 수 있다. 

enum feeling { happy, good, sad, bad, mad, terrible }
feeling f = happy;
cout happy;
f = happy + good;

 

반복문 

 for

for (초기식; 조건식; 증감식)
{
	문장; 
}

 

do while

do 
{
	문장;
} while (조건식);

 while

while (조건식)
{
	문장;
}

 

break

  - switch문과 반복문을 단 한번 탈출

#include <iostream>
using namespace std;
int main()
{
	for (int i = 1; i < 10; i++)
    {
    	cout << i << " ";
        if (i == 4)
        	break;
    }
    return 0;
}

 

continue

  - 실행 흐름을 반복문의 조건식이 있는 곳으로 이동시킴. 

for (초기식; 조건식; 제어식) // 코드1만 실행
{
	코드1;
    continue;
    코드2;
}

while (조건식) //코드1만 실행
{
	코드1;
    continue;
    코드2;
}

do //코드1만 실행
{
	코드1;
    continue;
    코드2;
} while(조건식);

 

범위 기반 for문

  - C#의 foreach

  - 반복 횟수는 배열 요소 개수에 따라 자동으로 결정됨

int arr[8] = { 1, 2, 3, 4, 5. 6. 7. 8 };
for (int i = 1; i < 9; i++)
{
	cout << arr[i] << endl;
}

for (int elem : arr)
{
	cout << elem << endl;
}

 

 

#include <windows.h>

 1. system("cls")

  콘솔창에 있는걸 지우는 함수

 2. system("pause")

  "계속하려면 아무 키나 누르십시오..."라는 문구를 띄워주는 함수

  프로그램을 잠시 멈추고, 시작하고 싶을 때 시작할 수 있음

 3. Sleep()

  프로그램을 잠시 멈추는 함수. 

  괄호 안에는 멈출 시간(초)를 입력

  기본 단위는 1000 = 1초, 예를 들어 5초 멈추고 싶다면 Sleep(5000)

 

 

 

함수 정의

 

프로그램 메모리 구조

  프로그램 실행을 위해 운영체제로부터 할당 받은 메모리

   static, 전역변수처럼 프로그램 시작 할 때부터 종료될 떄까지 메모리 공간에 있어야 할 데이터가 저장

   지역변수나 매개변수처럼 함수 호출 시에 메모리에 할당 되었다가 함수 실행 종료와 함께 자동 소멸됨

   동적으로 메모리가 할당되는 곳, 프로그래머가 원하는 시점에 할당하고 소멸 시킬 수 있는 영역

 

함수의 호출

  1. 스택에 함수로 전달할 매개변수와 호출이 끝난 뒤 돌아갈 반환 주소값 저장

  2. 함수 내에 선언된 지역 변수도 스택에 저장

  3. 함수의 모든 코드를 실행하게 되고, 실행이 전부 끝나면 반환값을 넘겨 줌

  4. 스택에 저장된 돌아갈 반환 주소 값으로 이동하고 스택에 저장된 함수 호출 정보 제거 

 

함수 호출 시 인수 전달 방법

  값으로 호출하기 

   : 호출하는 곳에서 인수를 전달할 때 인수의 값이 매개 변수로 복사되는 방법

  참조로 호출하기

   : 원본 인수가 함수에 전달되는 방법이다. 함수 안에서 매개 변수를 변결하면 원본 인수가 변경된다. 

 

 

 

참조자

  참조 변수는 일반적인 변수와 다르게 메모리 위에 새로운 영역을 잡지 않음. 

  단순하게 기존에 있던 변수와 연결해서, 

  기존에 있던 변수에 새로운 이름을 붙여주는 것뿐 => 원본 변수가 꼭 필요함

  

포인터 

  - 주소를 저장하는 변수 

  - 포인터 선언 : 형명* 포인터명;

  - 포인터를 통해 원래 변수의 값 접근: *포인터명; (* : 갑접참조연산자)

int a = 5;
int* pA;
pA = &a;
cout << a << endl;
cout << *pA << endl;
*pA = 50;
cout << a << endl;

 

값으로 호출하기 vs 참조로 호출하기

  - 참조로 전달은 인수와 매개변수가 동일 한 객체이므로 따로 복사할 필요가 없기 때문에 복사 비용이 발생하지 않음.

  - 포인터로 전달은 4바이트의 포인터만 복사하면 되므로 복사 비용이 굉장히 적음

  -  변경을 하면 안 되는 경우에 작은 객체라면 값으로 전달을 사용 큰 객체라면 const 한정자를 붙여서 참조로 전달 또는 포인터로 전달을 사용

  - 변경이 필요한 경우에는 반드시 참조로 전달 또는 포인터로 전달을 사용 

 

 

중복 함수

  - 동일한 이름의 함수를 여러 개 정의하는 것

728x90

'GGM > 자료구조' 카테고리의 다른 글

20230308 - 자료구조 - 기본개념, 문자열  (0) 2023.03.08
20230302 - 자료구조 - 기초 사항  (0) 2023.03.02

댓글