본문 바로가기
반응형

분류 전체보기303

[C++] 함수선언을 하면 좋은 이유 함수의 선언은 코드 앞부분에서 컴파일러에게 '나는 이런 함수들을 사용할것이다' 라고 알려주는 것입니다. 코드 앞부분에 함수를 선언하지 않고도 얼마든지 코딩을 할 수 있지만 함수의 정의 순서를 고려해야 하는 번거로움이 있습니다. 예를 들어 A라는 함수를 정의하고 B라는 함수를 정의했다고 합시다. 이때 A라는 함수 안에 B라는 함수를 사용할 수가 없습니다. B가 A보다 뒤에 정의 되었기 때문입니다. 이를 해결하려면 A와 B의 자리를 바꿔야합니다. 함수의 선언은 이러한 번거로움을 해결해줍니다. 함수의 선언 방법을 예시를 통해 알아봅시다. 두 수를 더한 값을 출력해주는 함수와 두 수를 곱한값을 출력해주는 함수를 선언하고 main 함수에서 사용하는 예시입니다. #include using namespace std;.. 2022. 8. 16.
[C++] 함수란 무엇인가 함수란? 함수는 입력값들에 대해 어떤 작업을 수행하고 결과값을 반환하는 기능을 하는 것을 말합니다. 입력값 -> 처리 -> 출력값 함수는 반복되는 작업을 편하게 만들어 줄 수 있고 코드를 기능에 따라 여러 부분으로 나눌 수 있게 해줍니다. C++ 소스파일의 기본 구성도 메인함수입니다. main 함수 안에 모든 내용을 다 넣게 되면 코드가 너무 복잡해집니다. 따라서 main 함수 밖에 여러 함수를 정의하여 기능을 나눕니다. 이 함수들을 main 함수에서 적절히 호출하여 사용합니다. C++ 을 함수의 모음이라고 할 수도 있습니다. main 함수와 main 함수 안에서 호출된 다양한 함수들이 C++ 코드를 구성합니다. 함수 선언해보기 C++에서 함수는 아래와 같이 선언합니다. 반환형 함수이름(매개변수1,매개변.. 2022. 8. 12.
공백문자와 널문자의 차이 널문자는 \0 이고 공백문자는 말 그대로 공백입니다. 그런데 둘다 C언어에서 출력하면 아무것도 나오지 않습니다. 공백문자는 그렇다 쳐도 널 문자는 \0이 출력되는게 아니라 공백이 출력됩니다. 그럼 둘이 같다는 말인가요? 아닙니다. 그 이유를 설명하겠습니다. 컴퓨터는 문자를 인식할 수 없기 때문에 문자는 정수에 매칭되어 있습니다. 이를 아스키코드라고 합니다. 널문자와 공백문자도 마찬가지로 어떤 정수에 매칭되어 있습니다. 널문자는 정수 0에, 공백문자는 정수 32에 대응되어 있습니다. 널문자와 공백문자는 C언어로 아래와 같이 선언합니다. '\0' ' ' 만약 이들을 정수 형태로 출력할 경우 각각 0과 32가 출력됩니다. 엄연히 다른 문자입니다. 2022. 8. 12.
[C++] 문자열이란 무엇인가 (문자열은 배열이다) 숫자와 문자입력 복습 C++에서 숫자와 문자는 하나의 메모리 공간에서 정의됩니다. 예를들어 3이라는 숫자를 정수형태로 정의하고 싶으면 아래와 같이 입력하면 됩니다. int a=3; 위와 같이 선언하면 메모리 공간에서 4바이트 만큼의 공간이 확보되고 a라는 이름이 붙습니다. 4바이트의 공간은 32비트이고 각 비트에 0 또는 1이 채워지면 3을 표현합니다. 문자를 입력할 때는 어떨까요. b라는 문자를 아래와 같이 입력했다고 합시다. char mychar='c'; char은 1바이트 공간을 차지하므로 메모리 공간에 1바이트 만큼의 공간이 확보되고 mychar 이라는 이름이 붙습니다. 1바이트는 8비트이므로 8비트 공간을 0 또는 1로 채워야 하는데요. c는 문자입니다. 문자를 숫자로 어떻게 나타낼까요. 컴퓨터.. 2022. 8. 12.
[C++] 배열 이름으로 인덱싱이 가능하다는 것의 의미 C++에서는 배열의 이름 뒤에 [인덱스] 를 붙이는 것으로 배열 원소에 접근할 수 있습니다. 예를 들어 아래와 같은 배열이 있다고 합시다. int ar[3]={1,2,3}; 각 원소에 접근하는 방법은 아래와 같습니다. 첫 번째 원소 ar[0] 두 번째 원소 ar[1] 세 번째 원소 ar[2] 이 부분에서 한가지 질문을 던져봅시다. "배열 이름 ar은 포인터이다. 포인터에 인덱싱이 가능하다는 말인가?" 대답은 yes 입니다. 배열의 이름 뿐만 아니라, 배열을 가리키는 포인터는 인덱싱이 가능합니다. 위에서 선언한 배열 ar을 가리키는 포인터변수를 하나 선언해봅시다. int* par=ar; par 에는 배열 ar의 주소가 저장됩니다. 이제 par은 ar과 같은 역할을 합니다. 아래 두 코드의 출력값이 같습니다.. 2022. 8. 12.
[C++] 배열의 원소를 포인터로 접근하기 ar[i]=*(ar+i) 배열의 원소에 접근하여 값을 변경하는 등의 행위를 포인터를 이용하여 수행하는 방법을 알아봅시다. 배열을 하나 정의합시다. int ar[3]={1,2,3}; 배열의 첫번째 원소에 접근하는 방법은 두 가지가 있습니다. 하나는 배열의 인덱싱을 이용하는 방식입니다. 아래와 같습니다. ar[0] 다른 하나는 포인터를 이용하는 방식입니다. 아래와 같습니다. *ar 아래 코드를 출력해보면 결과가 1로 동일합니다. cout 2022. 8. 12.
[C++] 포인터에서 * 연산자의 두 가지 사용법 *연산자는 두가지 경우에 다른 의미로 사용되기 때문에 많은 분들이 헷갈려 합니다. 오늘은 *연산자의 사용방법을 정리해봅시다. 포인터 변수 p를 하나 정의합시다. int a=3; int* p=&a; p라는 포인터에는 a의 주소값이 저장됩니다. 위 코드에서 *연산자는 포인터 변수를 선언할 때 사용되었습니다. *p 라는 변수가 선언된 것이 아니라 (int*) 라는 자료형인 p라는 변수가 선언된 것입니다. p는 int형 포인터상수입니다. 상수라는 이름이 붙은 이유는 변형이 불가능하기 때문입니다. *는 아래와 같은 상황에서도 사용됩니다. *p=5; *p는 p가 가리키는 주소에 입력된 값을 의미합니다. a에 입력된 값인 5입니다. 정리해봅시다. *연산자는 두가지 역할로 사용됩니다. 1) 자료형 뒤에 붙어서 포인터변.. 2022. 8. 12.
[C++] 배열이란 무엇인가 배열은 자료형을 담는 자료구조입니다. 쉽게 이해하려면 표를 떠올리시면 됩니다. 자료를 표로 정리해 놓으면 한눈에 보기 좋은 것처럼 자료를 배열 형태로 저장해 놓으면 관리가 편합니다. 2차원 배열이 표와 비슷하며 2차원 외에도 모든 차원의 배열이 정의될 수 있습니다. 코딩에서 등장하는 모든 것은 필요에 의해 정의된 것입니다. 배열이 없는 것보다 있는 것이 편리하기 때문에 배열을 정의해서 사용합니다. 배열 정의하는 방법 배열은 아래와 같이 정의합니다. 자료형 배열이름[원소개수] = {원소1,원소2,...}; 원소가 1,2,3인 배열 a를 정의하면 아래와 같습니다. int a[3]={1,2,3}; 배열에서 이름이 갖는 의미 위에서 정의한 배열을 한번 출력 해볼까요? 아마 아래와 같이 출력하려고 할 것입니다. .. 2022. 8. 12.
[C++] 참조자란 무엇인가 참조자는 어떤 변수의 메모리 공간에 붙은 또 다른 이름입니다. 쉽게 말하면 같은 대상을 여러 이름으로 부르고 싶은 경우에 사용합니다. 직접 코딩하며 이해해봅시다. int a=3; int &a2 = a; a2는 a와 같은 메모리 공간을 갖게 됩니다. 변수 a에 해당되는 메모리 공간에 a2라는 이름이 하나 더 생긴 것입니다. 아래와 같이 출력하면 둘 다 2이 출력됩니다. cout 2022. 8. 12.
[C++] 포인터에서 덧셈 뺄셈 연산 포인터 변수를 하나 선언해봅시다. int a=3; int *p=&a; p에는 a의 주소가 저장됩니다. 출력하면 아래와 같습니다. 0x7ffdc969234c 만약 p에 1을 더하면 어떤 결과가 발생할까요. 1,2,3을 더하고 출력하면 결과는 아래와 같습니다. 0x7ffc9f9d2a4c 0x7ffc9f9d2a50 0x7ffc9f9d2a54 0x7ffc9f9d2a58 위 값은 16진수입니다. 0x 는 16진수라는 의미입니다. 맨 뒷자리만 보면 주소가 입력된 포인터변수에 1을 더할 때마다 c, 0, 4, 8 로 변하고 있습니다. 16진수에서 c는 12입니다. 12에 4를 더하면 16이 되고 자릿수가 변하므로 첫자리는 0이 됩니다. c,0,4,8은 4씩 증가하는 것을 알 수 있습니다. int로 선언된 포인터변수에.. 2022. 8. 11.
[C++] 변수의 주소는 몇 진수일까 포인터를 이용하여 변수의 주소를 하나 출력해봅시다. #include using namespace std; int main() { int a=3; int *p=&a; cout 2022. 8. 11.
[C++] 포인터에서 p와 *p의 차이 포인터 변수를 하나 선언해봅시다. int a=3; int *p=&a; p에는 a의 주소가 저장됩니다. int *p 에서 *p가 어떤 의미를 갖는 것은 아닙니다. int* 가 의미를 갖습니다. 포인터 자료형이라는 뜻입니다. int* p라고 쓰는 것이 의미를 더 잘 표현합니다. *p 가 단독으로 사용되는 경우도 있습니다. 이때는 p가 가리키는 변수가 됩니다. *p 는 a입니다. 직접 출력하여 확인해봅시다. #include using namespace std; int main() { int a=3; int *p=&a; cout 2022. 8. 11.
[C++] 포인터란 무엇인가 포인터는 변수입니다. 하지만 우리가 일반적으로 알고 있는 변수와는 다릅니다. 이러한 이유 때문에 포인터에 익숙해 지는데 시간이 좀 필요합니다. 지금부터 우리에게 익숙한 변수에서 출발하여 포인터가 무엇인지 배워봅시다. 우리가 일반적으로 알고 있는 변수는 숫자나 문자를 입력할 수 있는 어떤 공간의 이름입니다. 각 변수는 메모리 공간을 갖습니다. 정수형 변수를 선언하고 값을 입력하는 아래 코드를 봅시다. int a=3; 위와 같이 선언할 경우 메모리 공간에 int 자료형의 크기인 4바이트가 할당됩니다. 할당된 4바이트 공간에 3이 입력됩니다. 메모리 공간에서 4바이트 만큼을 정한 뒤 a라는 이름을 붙인 것과 같습니다. 이후 a라는 변수를 사용하게 되는데요. 우리가 a를 사용할 때마다 컴퓨터는 a라는 이름이 붙.. 2022. 8. 11.
[C++] goto 문 (가리키는 곳으로 가시오) goto 문은 게임에서 '포탈'과 비슷합니다. 포탈 두개를 열어놓고 한 포탈에서 다른 포탈로 이동합니다. 예를들어 아래 코드를 실행하면 hello 는 출력되지 않고 world 만 출력됩니다. goto 문을 만나는 순간 portal1 로 이동하기 때문입니다. #include using namespace std; int main() { goto portal1; cout 2022. 8. 11.
[C++] continue 문 (다음번 순서로 넘어가시오) 반복문에서 continue 문을 만나면 다음번 순서로 넘어갑니다. for 문 안에 if문이 들어있는 경우를 예로 들어봅시다. #include using namespace std; int main() { for(int i=1; i 2022. 8. 11.
[C++] while 반복문 while 문은 조건식을 만족할 경우 명령어가 반복해서 실행되는 반복문입니다. 아래와 같은 형식으로 사용합니다. while(조건식) { 명령 } 예제를 통해 이해해봅시다. int i=1; while(i 2022. 8. 11.
[C++] for 반복문 for 문은 조건식을 만족할 경우 명령어가 반복해서 실행되는 반복문입니다. 아래와 같은 형식으로 사용합니다. for(초기식 ; 조건식 ; 제어식) { 명령 } 위 코드만 보고 이해하기 어려울 것이므로 한가지 예제를 통해 이해해봅시다. for(int i=1; i 2022. 8. 11.
[C++] switch 문 스위치라는 이름에 스위치문이 어떤 기능을 하는지 힌트가 담겨 있습니다. 스위치를 하나 떠올려 보면 스위치에는 버튼이 있습니다. 우리가 원하는 버튼을 누르면 해당 기능이 실행됩니다. 스위치 문도 똑같습니다. 아래와 같은 형식으로 사용합니다. switch(버튼이름) { case 버튼1: 명령 break; case 버튼2: 명령 break; case 버튼3: 명령 break; default: 명령 break; } 버튼이름에 원하는 버튼을 입력하면 됩니다. 버튼이름에 버튼1을 입력하면 버튼 1의 명령이 수행되는 방식입니다. default 는 입력된 값에 해당되는 버튼이 없는 경우 실행됩니다. 생략이 가능합니다. break 는 switch 문을 빠져나오는 명령어입니다. 2022. 8. 11.
[C++] if~else if~else 조건문 if문은 조건식이 참일 경우 명령문을 실행합니다. 아래와 같은 형식으로 사용합니다. if(조건식) { 명령문 } 조건식이 거짓일 경우에 무언가를 실행하고 싶다면 else 문을 추가하면 됩니다. 아래와 같은 형식으로 사용합니다. if(조건식) { 명령문 } else { 명령문 } 만약 조건식을 여러개로 분기시키고 싶다면 else if 문을 추가하면 됩니다. 아래와 같은 형식으로 사용합니다. if(조건식1) { 명령문 } else if(조건식2) { 명령문 } else if(조건식3) { 명령문 } else { 명령문 } elseif 문은 원하는대로 추가할 수 있습니다. 2022. 8. 11.
[C++] 자료형의 메모리 크기 확인 (sizeof) C++에서는 char, int, float, double 등 다양한 자료형을 제공합니다. 각 자료형이 차지하는 메모리 크기가 궁금한 경우 sizeof 함수를 통해 확인할 수 있습니다. 아래와 같은 형식으로 사용합니다. sizeof(자료형) 실제 코드를 통해 확인해봅시다. #include using namespace std; int main() { cout 2022. 8. 11.
[C++] 변수의 메모리 크기 확인 (sizeof) 아래와 같은 변수를 선언했다고 합시다. int a=3; 이 변수의 메모리 크기를 확인하려면 sizeof 함수를 사용하면 됩니다. 아래와 같이 사용합니다. sizeof(a) 실제 코드로 결과를 확인해봅시다. #include int main() { int a=3; std::cout 2022. 8. 11.
[C++] 삼항연산자 삼항연산자는 조건식이 참이면 결과1을, 거짓이면 결과2를 반환합니다. 조건식,결과1,결과2 로 항이 3개이기 때문에 삼하연산자라고 부릅니다. 아래 형식으로 사용합니다. (조건식) ? 결과1 : 결과2 아래 코드를 봅시다. int result; result = (1 2022. 8. 11.
[C#] 논리 연산자 논리연산자는 논리연산을 수행합니다. 논리연산은 부울연산이라고도 부르는데 참,거짓 두개의 값을 이용한 연산입니다. C#에서는 true, false라는 부울 자료형이 있어서 이들 사이에 연산이 수행됩니다. 논리연산은 세가지가 있습니다. 아래 표를 통해 알아봅시다. 2022. 8. 11.
[C++] 논리연산자 논리연산자는 논리연산을 수행합니다. 논리연산은 부울연산이라고도 부르는데 참,거짓 두개의 값을 이용한 연산입니다. C++에서는 true, false라는 부울 자료형이 있어서 이들 사이에 연산이 수행됩니다. 논리연산은 세가지가 있습니다. 아래 표를 통해 알아봅시다. 2022. 8. 11.
[C언어] 논리연산자 논리연산자는 논리연산을 수행합니다. 논리연산은 부울연산이라고도 부르는데 참,거짓 두개의 값을 이용한 연산입니다. C언어에서는 True, False라는 부울 자료형이 없기 때문에 참은 1, 거짓은 0을 사용합니다. C언어에서 1뿐만 아니라 0이 아닌 모든 값은 참입니다. 논리연산은 세가지가 있습니다. 아래 표를 통해 알아봅시다. 2022. 8. 11.
[C#] 비교연산자 C#의 비교연산자는 두 값의 크기를 비교합니다. 비교 결과가 참일 때는 True을, 거짓일 때는 False 를 반환합니다. 아래 표로 확인해봅시다. 2022. 8. 11.
[C++] 비교연산자 C++의 비교연산자는 두 값의 크기를 비교합니다. 비교 결과가 참일 때는 1을, 거짓일 때는 0을 반환합니다. 아래 표로 확인해봅시다. 2022. 8. 11.
[C언어] 비교연산자 C언어의 비교연산자는 두 값의 크기를 비교합니다. 비교 결과가 참일 때는 1을, 거짓일 때는 0을 반환합니다. 아래 표로 확인해봅시다. 2022. 8. 11.
[C#] 증감 연산자 (전위연산, 후위연산) C#에서 증감연산자는 1씩 증가시키거나 1씩 감소시키는 연산자입니다. a++ 는 a=a+1 과 같습니다. a-- 는 a=a-1과 같습니다. 전위형과 후위형으로 나뉩니다. 전위형은 증감연산을 먼저 하고 해당 연산이 포함된 코드를 실행합니다. 반면 후위형은 해당 연산이 포함된 코드를 먼저 실행하고 증감연산을 수행합니다. 아래 표를 통해 차이를 알아봅시다. 2022. 8. 11.
[C언어] 증감 연산자 (전위연산, 후위연산) C언어 에서 증감연산자는 1씩 증가시키거나 1씩 감소시키는 연산자입니다. a++ 는 a=a+1 과 같습니다. a-- 는 a=a-1과 같습니다. 전위형과 후위형으로 나뉩니다. 전위형은 증감연산을 먼저 하고 해당 연산이 포함된 코드를 실행합니다. 반면 후위형은 해당 연산이 포함된 코드를 먼저 실행하고 증감연산을 수행합니다. 아래 표를 통해 차이를 알아봅시다. 2022. 8. 11.
반응형