CS/자료구조

[자료구조] #3 C++ 문법(1)

태연한 컴공생 2024. 4. 14. 01:35

• 입력과 출력을 C와 C++에서 정의하는 방식

  C C++
Header #include <stdio.h> #include <iostream>
Input scanf() std::cin >>
Output printf() std::cout <<
New-line "\n" std::endl

 

cin, cout

 

cin(chraracter input) : 프로그램에서 사용자로부터 키보드로 입력을 받는데 사용된다.

'>>' 연산자와 함께 사용한다. 

 

cout(character output) : 프로그램의 결과를 화면에 출력하는데 사용된다.

'<<' 연산자와 함께 사용한다.

#include <iostream>

int main() {
    int num;

    // 사용자로부터 정수 입력 받기
    std::cout << "정수를 입력하세요: ";
    std::cin >> num;

    // 입력 받은 정수 출력
    std::cout << "입력한 정수는 " << num << "입니다." << std::endl;

    return 0;
}

 

Boolean

 

'bool' 키워드를 사용하여 참 또는 거짓을 표현한다.

 

• 포인터

 

포인터는 메모리 주소를 저장할 수 있는 변수이다.

포인터는 주소를 가진다.

 

포인터 선언

data_type* pointer;

 

 포인터 할당

pointer = &variable;

 

예시코드

int main() {
    int num = 5;    // 정수형 변수 선언 및 초기화
    int *ptr;       // 포인터 선언

    ptr = &num;     // 변수 num의 주소를 포인터 ptr에 할당

    // 포인터를 통해 변수 num의 값을 변경
    *ptr = 10;

    // 포인터를 통해 변수 num의 값을 출력
    std::cout << "num의 값: " << num << std::endl;

    return 0;
}

 

• 레퍼런스(참조자)

 

같은 공간을 다른 이름으로 지칭하는 것이다.

(대상에 또 다른 이름을 붙여주는 것)

int &num2 = num1;
int & num2 = num1; // 둘 다 가능

 

예시 코드

int main() {
	int num1 = 2021; // num1 선언 및 2021로 초기화
	int num2 = num1; // num1의 값이 num2에 복사

	num2 = 3047;
	cout << "val : " << num1 << endl; // num1의 값 출력
	cout << "ref : " << num2 << endl; // num2의 값 출력

	cout << "val's address: " << &num1 << endl; // num1의 주소 출력(& 연산자 이용)
	cout << "ref's address: " << &num2 << endl; // num2d의 주소 출력

	return 0;
}

Result
val : 3047
ref : 3047
val's address : 0x7ffeece5a8b8
ref's address : 0x7ffeece5a8b8

 

 배열

 

같은 타입의 변수를 하나로 묶어 관리해주는 것이다.

Type Name[size];
int A[6]

 

정적배열(1차원 배열)은 크기가 고정되면 바뀔 수 없다.

일반적으로 제로베이스 인덱스이다.

 

문자열을 좀 더 편하게 처리해줄 수 있는 클래스로 String이 있다.

#include <string>
string s = "문자열"

 

2차원 배열은 행과 열의 조합으로 구성된다.

Type Name[Row_size][Col_size];
int A[4][3];

 

• 동적 메모리 할당

 

프로그램 실행 중에 메모리를 필요에 따라 할당하고 해제하는 프로세스이다.

 

new 연산자

int *ptr = new int; // 정수형 변수를 위한 메모리 동적 할당

int *arr1 = new int[3[; // 크기가 3인 정수열 배열 동적 할당

 

delete 연산자

delete ptr; // ptr이 가리키는 동적 메모리 해제

 

항상 메모리를 할당한 후(new) 반드시 해제해야 한다.(delete)

메모리 누수를 방지하기 위함이다.

 

Call By Value & Call By Reference

 

Call By Value

함수에 인자로 전달되는 값이 복사되어 전달된다.

void square(int x) {
    x = x * x; // 매개변수의 값을 변경
}

int main() {
    int num = 5;
    square(num); // 값에 의한 호출
    // 여기서 num은 여전히 5입니다.
    return 0;
}

 

Call By Reference(포인터 사용)

함수에 인자로 전달되는 변수의 메모리 주소가 전달된다.

void square(int& x) {
    x = x * x; // 매개변수의 값을 변경
}

int main() {
    int num = 5;
    square(num); // 참조에 의한 호출
    // 여기서 num은 이제 25입니다.
    return 0;
}

원리

• 함수 오버로딩

 

같은 이름의 함수가 다른 매개변수 목록을 가지고 여러번 정의되는 것이다.

 

• 구조체

 

서로 다른 데이터 타입의 여러 변수를 하나의 그룹으로 묶어서 하나의 새로운 데이터 타입을 정의할 때 사용된다.

 

dot 연산자(.)를 이용해서 구조체나 클래스의 멤버에 접근할 수 있다.

#include <string>

struct Student {
    int studentID;
    std::string name;
    int age;
};

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

[자료구조] #6 Stack(2)  (0) 2024.04.19
[자료구조] #5 Stack(1)  (0) 2024.04.16
[자료구조] #4 C++ 문법(2)  (0) 2024.04.15
[자료구조] #2 알고리즘 분석(2)  (0) 2024.04.11
[자료구조] #1 알고리즘 분석(1)  (0) 2024.04.05