분류 전체보기 (71) 썸네일형 리스트형 [C++] 1-8 함수의 참조 전달 (참조자 매개변수) 함수의 참조자 매개변수 참조자를 가인수로 사용하여 call by reference 방식의 프로세스를 자동화할 수 있다. 참조자를 가인수로 사용하면 실인수 앞에 &를 붙이지 않아도 컴파일러는 실인수의 주소를 자동적으로 가인수에 전달한다 (실제로는 실인수 앞에 &를 붙이면 오류가 발생하므로 주의해야 한다). 함수의 가인수로 참조자를 사용하면 포인터를 가인수로 사용하는 call by reference방식과 동일한 효과를 얻을 수 있다. 그리고 포인터 연산자를 사용하는 번거로움을 피할 수 있으니 편리하다. 예제 #include using namespace std; void swap(int& x, int& y);//함수의 원형 선언 int main() { int x, y; x = 100, y = 600; cout [C++] 1-7 참조자(Reference) 사용 이유 및 포인터 차이 참조자(Reference) 포인터의 일부분을 대신해 주는 것으로 참조자(reference)가 있다. 참조자는 특정 변수를 다른 이름으로 만들거나 함수의 인수를 전달할 때 유용하게 사용된다. 실제로 참조자는 함수와 함께 사용되는 경우가 대부분이다. 참조자 변수는 아래와 같이 참조 연산자인 &를 사용하여 선언한다. -예시- 데이터형 &참조자 변수 = 변수 참조자 변수는 포인터와 비슷해 보이지만 포인터는 아니다. 포인터는 주소를 가리키지만 참조자 변수는 이미 존재하는 변수와 동일한 데이터 값과 동일한 주소를 갖는다. 따라서 참조자 변수의 데이터형은 대응하는 변수의 데이터형과 동일해야 한다. 그리고 참조자 변수의 값을 변경하면 상응하는 변수의 값도 변한다. 반대인 상황도 마찬가지이다. 참조자 변수를 만드는데 몇.. [C++] 1-6 함수 호출 방식 (call by reference) Call by reference call by reference 방식에서는 실인수의 주소가 함수에 전달된다. 함수는 실인수의 주소를 가인수로 복사하여 사용하므로 마치 실인수를 직접 사용하는 것과 같이 된다. 즉, 함수에서 가인수의 값을 바꾸면 호출 측의 실인수 값도 변한다. 이때 가인수는 주소를 전달받기 때문에 포인터로 선언돼야 한다. 함수에서 return문에 의해 반환되는 값의 개수는 오직 하나이다. 따라서 두 개 이상의 값을 반환하고 싶다면 call by reference 방식을 사용하는 것이 좋다. 또한 배열을 함수로 전달하는 경우에도 call by reference 방식을 사용하는 것이 편리하다. 예제 1 #include using namespace std; void func(int x, int .. [C++] 1-5 함수 호출 방식 (call by value) 함수 호출 방식 함수가 호출해서 인수를 전달하는 방식은 크게 두가지가 있다. 하나는 call by value 방식이고, 다른 하나는 실인수의 주소(address)를 가인수에 전달하는 call by reference 방식이 있다. 이번 포스팅에서 call by value 방식을 설명하고자 한다. Call by value call by value는 가장 일반적인 함수 호출 방식이고, 실인수의 실제값이 피 호출 함수로 전달된다. 이때 함수는 실인수의 값을 가인수로 복사하여 사용하게 되는데, 실인수와 가인수는 서로 다른 메모리 영역을 차지한다. 가인수들은 stack이라는 임시 메모리 영역에 저장되며 함수가 종료되면 이들 가인수들은 stack에서 사라진다. 따라서 함수 실행 중에 가인수의 값이 변하더라도 실인수의.. [C++] 1-4 재귀함수 설명 및 예제 재귀함수란? 재귀 함수(recursive call)이란 함수가 자기 자신을 다시 호출하여 실행하는 함수를 말한다. 함수가 호출되면 실인수를 전달받는 가인수들의 값과 그 함수 내에서만 사용되는 지역변수들의 값은 메모리 상의 스택(stack)이라는 임시 메모리에 저장된다. 함수의 실행이 종료되면 지역변수들은 스택 메모리에서 사라진다. 만약 재귀 호출의 회수가 많아지면 호출된 횟수만큼 지역변수들의 메모리 영역이 새로운 스택 메모리에 쌓이게 된다. 따라서 함수의 과도한 재귀 호출은 스택 메모리의 이용을 증가시켜 'stack overflow' 오류를 발생시킬 수 있다. 예제 #include using namespace std; int fact(int n);//함수의 원형 선언 int main() { int a, .. [C++] 1-3 void 함수 호출 및 쓰는 이유 void 함수 함수형은 return문에서 반환해 주는 값의 데이터형과 일치해야 한다. 만약 반환값이 없으면 함수형을 void로 지정할 수 있다. void형 함수에서는 반환값이 없으므로 return문을 사용하지 않는다. 하지만 뒤에 식이 생략된 return문을 void형의 함수인 경우 특별히 사용할 수 있다. 또한, void는 함수를 정의할 때 인수가 없다는 의미로도 사용할 수 있다. 인수가 없는 함수를 정의하는 경우, 괄호 안을 비워도 된다. 하지만 괄호 안에 void를 표기하는 것이 좀 더 바람직한 프로그래밍 작성법으로 볼 수 있다. 예제 1 #include using namespace std; void xyz(int x);//함수의 원형 선언 int main()//main() 함수 { xyz(123).. [C++] 1-2 함수의 원형 선언 및 위치 1. 함수의 원형 사용하는 함수의 수가 적은 경우에는 함수가 main() 함수 앞에 위치해도 상관없다. 하지만 사용하는 함수의 수가 많고, 복잡한 경우에는 컴파일에 문제가 발생할 수가 있다. 그런 경우, 이들 함수의 원형을 main() 함수 앞에 모아서 선언하면 이들 함수에 관한 정보를 컴파일러에게 알려줘서 해결할 수 있다. 실제로 함수의 원형을 main() 함수 앞에 선언하고 함수의 정의를 main() 함수 뒤에 위치하면, 편리하게 프로그래밍할 수 있다. 아래 예제들처럼, 함수의 원형은 사용자가 직접 main() 함수 앞에 선언해야 한다. 함수의 원형을 선언하고 끝에 세미콜론(;)을 기입해야 한다. 예제 1 #include using namespace std; int sum(int, int);//함수의.. [C++] 1-1 함수의 정의, 콜론 의미, 만들기 1. 함수란? 함수란 특정한 작업을 수행할 수 있도록 설계된 독립적인 프로그램을 말한다. 프로그램 내에서 여러 번 실행해야 할 특정 작업이 있는 경우 함수를 활용하면 편리하다. 함수들 중에는 수학 함수, 파일 관련 함수, 입출력 함수와 같이 C++ 컴파일러에서 기본적으로 제공하는 표준 함수(Standard function)와 사용자가 직접 만들어서 사용할 수 있는 사용자 정의 함수(User defined function)가 있다. 표준함수는 #include로 라이브러리(library) 파일을 읽어서 사용할 수 있다. 2. 함수의 사용 함수의 가능은 main()함수 앞에서 정의하거나 main() 함수 뒤에서 정의할 수 있다. 하지만 후자인 경우에는 반드시 함수의 원형을 main() 함수 앞에 선언하여 컴파.. libtorch CUDA GPU 인식 안된 경우 해결방법 "libtorch: torch::cuda::is_available()" 현상 visual studio 2019에서 libtorch cuda 버전을 정상적으로 link했음에도 불구하고 CUDA 인식이 안되었음. std::cout "ImportError: libGL.so.1: cannot open shared object file: No such file or directory" 해결방법 현상 Open3d package를 import하다가 이러한 에러가 발생했다. ImportError: libGL.so.1: cannot open shared object file: No such file or directory 해결 아래와 같이 package를 설치해서 해결할 수 있었다. apt-get install libgl1-mesa-glx 이전 1 ··· 3 4 5 6 7 8 다음