포인터와 주소값에 관련하여
- 함수에서 포인터를 리턴하는 경우
- 파라미터에서 포인터를 받는 경우
#define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <cstring> int* foo(){// int*를 리턴하는 foo라는 함수, int*는 주소값 즉, 주소값을 리턴 int a = 100; return &a; // a의 주소값은 int*로 리턴된다 } int main (){ int v = 100; int* pv = &v; // v는 pv가 됐다, &v 즉 주소값은 포인터 변수에 할당이 될 수 있다. return 0; } |
int main (){ int v = 100; int* pv = &v; // &를 붙였을 때 주소값이 나온다 이 나온 주소값은 int*이다. 두개가 동일하다 타입이 같다 return 0; } |
#define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <cstring> void foo(int* pv){ } int main (){ int* a; foo(a); // 타입이 같으니 a를 집어넣을 수 있다. int v = 100; foo(&v); // &v를 하면 주소값이 나온다, 포인터가 아닐 경우 파라미터로 집어넣을 때는 &를 붙여아한다 int* b = &v; // 변수의 이름에 &를 붙이면 int* 타입이다. return 0; } |
if 절의 예측 실행
#define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <cstring> bool foo() { printf("call foo\n"); return true; } int main (){ if (true && true) { // if는 왼쪽 값과 오른쪽 값을 동시에 비교하느냐 : 그럴수도 있고 아닐수도 있다 } if (false && true) { // false면 true를 실행하지 않고 그냥 끝내게 된다 } if (false && foo()) { printf("하하\n"); // 이 함수는 절대 실행이 되지않는다. false를 보고 뒤쪽을 실행 안해도 되겠구나 하고 넘어감 } if (false || foo()) { printf("하하\n"); // 잘 바뀌지않는 false 같은 구문들을 앞쪽에다가 집어 넣어주게 되면 if 절에서 검사를 // 하게 되더라도 컴파일러가 유동적으로 판단 가능하여 최적하에서 이득을 가져갈 수 있다. } return 0; } |
재귀함수
- 자기자신을 호출하는 함수를 재귀함수라고 한다.
반복문을 대처하기 위해 사용한다.
글자를 거꾸로 출력하는 예시
#define _CRT_SECURE_NO_WARNINGS #include <cstdio> #include <cstring> void reserve(const char* str, int index){ if(str[index] == '\0') return; // index 숫자의 위치가 문자열을 판단했을때 널문자라면 아무것도 안하고 종료 else { reserve(str, index+1); // 널문자가 아닌 경우 다시 자기자신을 호출, 자기 자신을 호출할 때 인덱스에 1번 값을 더함 printf("%c", str[index]); // 끝나고 나면 현재 위치의 값을 출력 } } apple 입력시 a 출발 p 출발 식으로 한 글자씩 재귀함수 else 문으로 가 즉 자기자신을 계속 다시 호출하여 널 문자까지 돌아 뒤에서 부터 호출 int main (){ char input[100]; scanf("%99[^\n]s", input); reserve(input, 0); // 사용자로부터 문자열을 받은 다음에 그것에 0을 집어넣게 된다. return 0; } |
'C++' 카테고리의 다른 글
c++ 10 (C++ 의 컴파일에 관하여 - LNK 오류에 대처하기) (0) | 2022.02.14 |
---|---|
c++ 9 (여러개의 헤더와 소스) (0) | 2022.02.11 |
c++ 6 (열거형 - 가독성을 위한 타입) (0) | 2022.01.23 |
c++ 5 (가상함수 - Java, C# 등 다른 언어의 개념 까지 ) (0) | 2022.01.16 |
c++ 4 (오버라이드 / 오버로드) (0) | 2022.01.13 |