본문 바로가기

공부

(20)
C언어 - <math.h> 원주율 값 사용하기원의 넓이를 구하는 문제를 풀면서, 처음 보는 헤더파일 선언이 있어서 찾아봤다.#define _CRT_SECURE_NO_WARNINGS // warning 문구 뜨지 않게#include #define _USE_MATH_DEFINES #include #ifndef M_PI // M_PI가 정의되어 있지 않으면,(if not)#define M_PI 3.14159265358979323846 // M_PI를 다음과 같이 정의#endif // if문 종료위의 헤더파일을 불러오는 소스 코드를 번역해보면 다음과 같다. 세번째줄 부터 살펴보면,`_USE_MATH_DEFINES`를 정의하고(`#define _USE_MATH_DEFINES`)`math.h`를 불러온다(`#include `)`math.h`..
C언어 - Overflow / Underflow / 자료형 자료형의 최대값을 넘는 수를 변수에 대입(Overflow)하면, 처음으로 돌아가 초과분에 해당되는 수를 출력하게 된다.#include int main(){ char num1 = 128; // char에 저장할 수 있는 최댓값 127보다 큰 수를 할당 // 오버플로우 발생 unsigned char num2 = 256; // unsigned char에 저장할 수 있는 최댓값 255보다 큰 수를 할당 // 오버플로우 발생 printf("%d %u\n", num1, num2); // -128 0: 저장할 수 있는 범위를 넘어서므로 ..
C언어 - (16) : 함수, 보이드 포인터 함수 포인터우리가 함수를 선언할 때 적어주는 '함수의 이름'은 사실 함수가 저장된 메모리 공간을 가리키는 포인터의 역할을 한다.일반 변수와 마찬가지로, 함수의 이름이 가리키는 메모리 주소값은 '함수 포인터 변수'를  선언해서 저장해주어야 하며,'함수 포인터 변수'를 선언하기 위해서는 그에 해당하는 함수 포인터의 형(type)을 마찬가지로 알아야 한다. '함수 포인터의 형'에 대한 정보는 '함수의 반환 형'과 '매개변수'에 대한 정보를 참고하면된다.따라서, '함수의 반환 형'과 '매개변수'가 동일한 서로 다른 함수는 '동일한 함수 포인터 변수를 공유'할 수 있다. 예를 들어, `int Function1(int num)`과 `int Function2(int num)`은 반환 형(int)과 매개변수(int 1..
C언어 - (15) : 다차원 배열의 포인터 다차원 배열과 포인터1차원 배열이 선언된 경우, 배열의 이름이 포인터의 역할을 하고 첫번째 메모리 주소를 가리킨다고 했었다.(기억 안나면) 2차원 배열도 동일한 원리를 지니는데 `int arr2d[3][3];`의 2차원 배열이 선언되었다고 할 때,`arr2d`라는 배열의 이름은 `arr2d`가 갖는 메모리 주소의 가장 첫번째 주소를 가리키는 포인터의 역할을 하게 된다.    추가적인 것은, 2차원의 경우에 첫번째 차원의 index값이 각 행이 갖는 메모리 주소의 첫번째 주소를 가리키는 포인터 역할을 하게 된다. 쉽게 이해하면 2차원 배열 안의 `arr2d[0], arr2d[1], arr2d[2]`라는 1차원 배열이 존재하고, 이러한 1차원 배열들은 기존 1차원 배열이 갖는 특성을 갖게 되는 것이다. $\..
C언어 - (14) : 포인터의 포인터 '포인터'에 대해 잘 기억이 나지 않는다면, 다음 포스트 참고 2024.10.15 - [공부/C언어] - C언어 - (10) : 포인터 C언어 - (10) : 포인터포인터포인터 변수의 개념변수에 데이터가 저장되면 그에 맞는 메모리 주소가 할당되는데, 이러한 메모리 주소를 저장하기 위한 목적으로 선언되는 것이'포인터 변수'이다.위의 그림과 같이 어sdsf1225.tistory.com2024.10.15 - [공부/C언어] - C언어 - (11) : 포인터와 배열 C언어 - (11) : 포인터와 배열배열과 포인터에는 공통점과 차이점이 존재한다. 간단한 예시로 배열과 포인터의 공통점, 차이점에 대해 살펴볼 수 있다.#include int main(void){ int arr[3] = {0,1,2}; printf(..
C언어 - (13) : 다차원 배열 '다차원 배열'이란 말 그대로 2차원 이상의 배열을 의미한다 1차원 배열을 `int arr[10];`과 같은 방식으로 선언했다면, `int arr_2d[5][5];`와 같은 방식으로 5x5의 2차원 배열을 선언할 수 있고`int arr_3d[3][3][3];`과 같이 3x3x3의 3차원 배열과 그 이상도 선언할 수 있다. 배열의 원소에 대한 접근 방법 역시 1차원 배열의 접근 방식과 동일하며, 차원 수에 맞는 index를 넣어주는 것만 신경써주면 된다#include int main(void){ int villa[4][2]; int popu, i, j; // 가구별 거주인원 입력 받기 for (i=0; i위 코드를 통해 2차원 배열을 어떻게 사용하는지에 대해 어느 정도 감을 익힐 수 ..
C언어 - (12) : 포인터와 함수 함수에 대해 복습해보면, 함수를 선언할 때 'return type', 'function name', 'input(type)' 등의 요소가 필요했다.int Func(int num) // int : return type / Func : name / int num : input type, input{ 실행문 return res;}함수는 input으로 입력된 인자를 활용해 함수를 실행시키게 되는데, 인자를 전달받을 때변수 그 자체를 받는 것이 아니라 변수에 저장된 값을 복사해 전달받게 된다. 만약 어떤 함수에서 배열을 인자로 사용해야되는 경우가 있다면, 배열을 인자로 주고 함수를 실행시키면 될 것 같지만 C언어는 매개변수로 배열의 선언을 허용하지 않기 때문에 그렇게 직접적으로 전달할 수 없다. 따라서..
C언어 - (11) : 포인터와 배열 배열과 포인터에는 공통점과 차이점이 존재한다. 간단한 예시로 배열과 포인터의 공통점, 차이점에 대해 살펴볼 수 있다.#include int main(void){ int arr[3] = {0,1,2}; printf("배열의 주소 : %p \n", arr); printf("첫번째 요소의 주소 : %p \n", &arr[0]); printf("두번째 요소의 주소 : %p \n", &arr[1]); printf("세번째 요소의 주소 : %p \n", &arr[2]); return 0;} 위 코드를 실행시켜보면, `arr`의 주소값과 `arr[0]`의 주소값이 일치하는 것을 확인할 수 있다.따라서, 배열의 이름(`arr`)는 포인터 변수와 마찬가지로 저장된 데이터의 첫번째 메모리 ..