const
const 키워드를 붙이게 되면 특정 메모리 영역을 상수화 시킨다.
변수에 상수성을 부여해서 이후 값 수정이 불가능하다.
const 변수를 사용하는 이유
어떤 변수의 값이 변하는 것을 원하지 않을 때 실수를 방지해준다.
주로 전역 const로 굉장히 많이 사용된다.
const의 사용법
const int const Value = 0;
const int Value = 0;
int const Value = 0;
이 코드는 모두 같은 의미를 가진다.
그러나 포인터 변수의 경우에는 달라지게 된다.
맨 앞에 붙이게 되면 ptr에 저장된 주소가 가리키는 값을 상수화 하겠다는 의미이다.
*ptr을 통한 값 변경이 불가능해지게 된다.
이 코드는 포인터에 저장된 메모리 주소를 상수화 하겠다는 의미이다
포인터가 가리키는 변수의 메모리 주소 변경이 불가능해지게 된다.
이렇게 쓰는 경우 주소와 값 두 가지 값의 변경이 모두 불가능해진다.
물론 ptr 변수에 한해서 상수화가 된 것이고 ptr이 가리키고 있는
int a는 const가 아니므로 a의 값은 변경할 수 있다.
const를 사용한 함수의 전달
함수의 return 값에는 const 키워드를 붙이는 건 필요없는 행동
일반적으로 return된 값을 다른 변수에 저장해서 쓰기 때문에
return값이 변경되는 것을 막아야할 일도 이유도 없다.
함수 사용 시에 인자로 참조나 포인터를 받을시에
const를 사용함으로써 매개변수가 함수 내부에서 값이 변경되는 것을 막을 수 있다.
const가 붙어있지 않은데 포인터나 참조를 사용하는 함수가 보인다면
인자로 넣은 값이 바뀌어서 나올 것이라고 봐야 한다.
함수의 Return
함수의 return 값으로 정해진 자료형을 반환해야 한다.
만약 return을 하지 않는다면 컴파일 오류가 발생하게 된다.
단, 반환 자료형이 void인 경우에는 return을 생략할 수 있다.
값을 return 하게 되면 해당 함수는 즉시 종료된다.
Random
난수 생성은
rand()
mt19937(메르센 트위스터)
WELL512 - 따로 c++ 라이브러리에서 제공하지 않음.
등의 방법을 이용할 수 있다.
난수 생성은 시드값을 기준으로 어떤 값을 생성하는 것이다.
그렇기 때문에 시드값이 변하지 않으면 난수결과 또한 실행시마다 똑같은 결과가 나온다
따라서 시드값이 계속 변하도록 해야하는데 시간은 계속 변하기 때문에
이 값을 시드값으로 집어넣게 되면 실행할 때마다 다른 난수 생성 결과를 얻게 된다.
//rand
srand((unsigned)time(NULL));
for (int i = 0; i < 5; i++)
{
cout << rand() % 100 + 1 << '\n';
}
//mt19937
mt19937 mt((unsigned int)time(NULL));
uniform_int_distribution<int> dist(1, 100);
for (int i = 0; i < 5; i++)
{
cout << dist(mt) << endl;
}
난수 생성 결과
과제1
String 길이 카운트 함수
#include <iostream>
int StringCount(const char* const _Str)
{
int Count = 0;
while (_Str[Count])
{
Count++;
}
return Count;
}
int main()
{
// [B][B][B][B][0]
int Count = StringCount("BBBB");
// cout << Count;
return 0;
}
과제2
숫자 길이 Count 함수
(추가과제) NumberToString
#include <iostream>
int NumberCount(int _Value)
{
int Result = 0;
while (_Value)
{
Result++;
_Value /= 10;
}
return Result;
}
void NumberToString(char* Buffer, int BufferSize, int _Value)
{
int Size = NumberCount(_Value);
for(int i = Size - 1; i >= 0; i--)
{
Buffer[i] = _Value % 10 + '0';
_Value /= 10;
}
}
int main()
{
//5
int Result0 = NumberCount(12358);
//4
int Result1 = NumberCount(5258);
//7
int Result2 = NumberCount(5258111);
// std::cout << Result0 << '\n' << Result1 << '\n' << Result2 << '\n';
char Buffer[100] = { 0 };
NumberToString(Buffer, 100, 31232421);
// std::cout << Buffer;
return 0;
}
'개인 공부 및 프로젝트 > 국비과정' 카테고리의 다른 글
20240925 - 프로그래밍 패러다임, 클래스 (11) | 2024.09.30 |
---|---|
20240924 - MyPrintf, 객체지향 패러다임 (0) | 2024.09.30 |
20240913 축약 연산자 문자열 조건문 반복문 (1) | 2024.09.23 |
20240912 포인터와 참조 (4) | 2024.09.13 |
20240911 메모리와 연산자 (0) | 2024.09.13 |