본문 바로가기

프로그래밍 언어 정리/C, C++

(5)
[C/C++] 포인터와 상수 int i1 = 1; int i2 = 2; const int* p1 = &i1; int* const p2 = &i2; 상수 키워드 const와 포인터를 쓰다보면 같아 보이지만 위의 코드처럼 다른 두 가지 경우가 등장합니다. p1의 const는 p1이 참조하는 i1의 값을 바꾸지 못하게 합니다. p2의 const는 p2가 값을 바꾸지 못하게 합니다. 말로만 보면 어려우니 코드로 확인해보겠습니다. #include using namespace std; int main() { const char * s1 = "Hello"; int i1 = 1; int i2 = 2; const int* p1 = &i1; int* const p2 = &i2; int i3 = 3; int i4 = 4; (*p1) = 11; // 이..
[C/C++] bad_array_new_length 백준 5836번 문제를 풀어서 제출했는데 segfault가 나왔습니다. 어느 정도 간 거 보니까 로직은 맞았는데... 무엇을 놓쳤을까 이런저런 확인을 하다가 큰 입력이 주어졌을 때 해당 콜을 뱉고 코드가 종료되었습니다. chat gpt말고도 더 검색해보니... sort를 할 때 벡터가 매우 크거나, 사이즈로 음수를 참조하는 일이 발생하면 위와 같은 에러를 발생시킨다고 합니다. 벡터가 동적이다 보니 이런 일이 발생합니다. 문제는 벡터의 크기는 900미만에 내부벡터의 크기도 약 10내외정도로 큰 크기는 아니었습니다. 또 cmp를 빼주니 멀쩡히 돌아갑니다. 벡터의 크기가 크지 않았음을 이용하여 직접 선택정렬을 구현하는 방식으로 문제를 해결하였습니다. 추론을 해보자면 다차원 벡터이면서, 직접 정렬방법을 구현하고..
[C/C++] call by value, call by address(pointer), call by reference reference / not reference reference == not copy not reference == value, address == copy ∴ call by value => value copy call by address => pointer copy call by reference => reference
[C++] NULL과 nullptr NULL과 0은 다릅니다. NULL은 포인터이고 0은 int이니 사실은 비교도 되지 않습니다. NULL과 NOT NULL로 나뉘고, 0은 그저 NOT NULL에 불과합니다. [NULL] 초기화조차 안 한 상태. 포인터 변수에 넣어서 0 주소를 넣는 용도로 사용할 수도 있지만 일반 변수에도 넣을 수 있습니다. 분명 위에서 NULL은 포인터라고 했는데 일반 변수에 들어간다니 조금 의아합니다. 아래에서 확인해 봅시다. #include using namespace std; int main(void) { int a = NULL; // 가능 int* b = NULL; // 가능 cout
[C++] 함수와 const const는 값의 변경을 막는 키워드입니다. const int N = 10; N = 9; // error N++; //error N += 1; // error 위의 예시들과 같이 const로 선언된 변수에 변형을 가하면 error가 납니다. const는 변수가 아닌 함수에도 적용할 수 있습니다. 게다가 함수 앞에, 뒤에, 파라미터에도 적용할 수 있습니다. 하나씩 차근차근 보도록 하겠습니다. 1. 함수 앞에 const가 붙은 경우 const int add(int a, int b) { return a + b; } return값이 상수 취급이 됩니다. 사실 위의 add 함수의 경우, return값이 상수가 되는 것이 의미가 없습니다. int N을 선언한 뒤, N에 const로 선언된 함수의 반환값을 넣으나 그..