본문 바로가기

~ 2024.03/C 언어11

[C 언어 기초] 타입 별 메모리 크기 현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. 아래 비트는 Windows 기준임을 알려드립니다. 64비트 운영체제 타입 크기 int 4 short 2 long 4 long long 8 char 1 float 4 double 8 int pointer 8 char pointer 8 void pointer 8 32비트 운영체제 타입 크기 int 4 short 2 long 4 long long 8 char 1 float 4 double 8 int pointer 4 char pointer 4 void pointer 4 struct의 메모리 크기 struct는 매우 독특한 동작을 한다. 구조체가 메모리 공간을 잡는 원리는 다음과 같다. (참고) 구조체는 구조체.. 2024. 1. 5.
[C 언어 기초] C 언어 문법 훑어보기 - 데이터 타입, 제어문, 함수, 포인터 K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다. GPT의 답변을 기준으로 C 언어 문법을 훑어보는 글입니다. 현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. 기본 문법 C 는 절차 지향적 프로그래밍 언어로, 코드는 함수로 구성됨. 세미콜론 (;)으로 문장이 끝남. 데이터 타입 정수형 데이터 타입 16비트에서의 정수형 타입 최솟값 최댓값 short int -32,768 32,767 unsigned short int 0 65,535 int -32,768 32,767 unsigned int 0 65,535 long int -2,147,483,648 2,147,483,647 unsigne.. 2023. 12. 15.
[C 언어 기초] 동적 메모리 할당 K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다. 현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. 동적 메모리 할당 C의 데이터 구조는 기본적으로 크기가 고정되어 있다. 예를들어, 배열 원소의 개수는 프로그램이 컴파일될 때 고정된다. 고정된 크기의 데이터는 문제가 될 수 있다; 프로그램을 작성할 때 크기를 선택할 수 밖에 없기 때문이다. 프로그램을 수정하고 다시 컴파일하는것 외에는 크기를 변경할 수 없다. 다행히도, C는 동적 메모리 할당을 제공한다. 동적 메모리 할당이란 프로그램 실행중에 메모리를 할당하는 기능이다. 동적 메모리 할당을 사용하면 필요한 만큼 데이터 구조를 늘리거나,.. 2023. 12. 13.
[C 언어 기초] 문자열 문자마다 읽기 K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다. 현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. 문자열 리터럴 문자열 리터럴(string literal)이란 큰 따옴표로 둘러쌓인 문자의 연속체를 의미한다 문자열 리터럴 저장 방법 C는 문자열 리터럴을 문자 배열 취급을 한다. C 컴파일러가 프로그램에 n 길이의 문자열 리터럴을 보게 되면 해당 문자열을 위해 n + 1 바이트를 할당해준다. 이 메모리는 해당 문자열의 문자들을 저장하고, 마지막에 한 가지 추가적인 문자인 널 문자(null character)를 넣어주어 문자열의 끝임을 알려준다. 널 문자는 비트가 전부 0인 바이트이므로 .. 2023. 12. 13.
[C 언어 기초] 포인터와 배열 K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다. 현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. 포인터 산술 포인터는 배열의 원소를 가리킬 수 있다. int a[10]; int *p = &a[0]; 위 코드를 통해 포인터 변수 p로 a[0]에 접근할 수 있다. 예를 들어, a[0]에 5라는 값을 저장하고 싶으면 다음과 같이 해주면 된다. *p = 5; p를 a의 첫번째 원소를 가리키게 만드는건 그렇게 대단한 일은 아니다. 하지만 p에 포인터 산술(pointer arithmetic)을 사용하게 되면 a의 다른 원소에 접근이 가능하다. C는 세 가지의 포인터 산술을 지원한다. 포인터에.. 2023. 12. 13.
[C 언어 기초] 포인터 K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다. 현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. 포인터 변수 대부분의 최신 컴퓨터들에서 주 메모리는 바이트(byte) 단위, 즉 8비트짜리 정보를 저장할 수 있는 단위로 나뉜다. 각 바이트에는 고유한 주소(address)를 가지므로, 모든 바이트들은 서로 이 주소를 통해 메모리 내에서 구분한다. 프로그램의 모든 변수들은 메모리에서 한 개 이상의 바이트를 차지한다. 첫번째 바이트의 주소를 변수의 주소라고 부른다. i 변수가 주소 0과 1을 갖는 바이트를 차지한다면 i의 주소는 0이다. 여기서 등장하는 개념이 바로 포인터다. 주소를 숫자.. 2023. 12. 13.
[C 언어 기초] 선택문 K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다.현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. 논리표현식C에서는 i < j 와 같은 비교식의 결과값은 1 혹은 0인 정수다. 1이면 참을 의미하고, 0은 거짓을 의미한다. 관계 연산자기호의미 (왼쪽이 오른쪽보다)크다; 초과=크거나 같다; 이상 동등 연산자기호의미 (왼쪽이 오른쪽과)==같다!=같지 않다 논리 연산자기호의미!부정&&논리곱||논리합if 문if문은 프로그램이 표현식의 값을 사용하여 두 가지 선택지 중 하나를 고르게 만든다.if (expression) statement if문이 실행되면 괄호 안의 표현식이 평가된다. 만약 표현.. 2023. 12. 13.
[C 언어 기초] 표현식 K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다. 현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. C언어의 표현식 종류 산술 연산자 단항 이항 덧셈류 곱셈류 + (단항 덧셈) + (덧셈) * (곱셈) - (단항 뺄셈) - (뺄셈) / (나눗셈) % (나머지) ※ [구현정의행동] /이나 % 연산자를 음수 피연산자와 함께 사용하게 되면 결과를 표현해주기 매우 힘들다. C89 표준에 의하면 두 개의 피연산자 중 하나라도 음수면 나눗셈의 결과값은 반올림 되거나 반내림 될 수 있다고 되어있다. 예를 들면 -9 / 7의 값이 -1이거나 -2가 될 수 있다. 만약 i나 j가 음수라면 C89에서 .. 2023. 12. 13.
[C 언어 기초] 서식 입출력 K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다. 현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. printf 함수 printf 함수는 서식 문자열 (format string) 이라고 불리는 문자열을 문자열의 특정 부분에 추가된 값과 함께 출력하는 기능을 수행하도록 만들어졌다. (The printf function is designed to display the contents of a string, known as the format string, with values possibly inserted at specified points in the string.) printf(st.. 2023. 12. 12.
[C 언어 기초] C 프로그램의 구조 K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다. 현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. #include int main(void) { printf("To C, or not to C: that is the question.\n"); return 0; } #include 는 C의 표준 입출력 라이브러리에 대한 정보를 첨가(include)하기 위해 필요한 줄이다. 프로그램에서 사실상 실행되는 코드는 main 에 존재하고, 말그대로 대표(main) 프로그램을 의미한다. main 안에 유일한 명령어는 원하는 자료를 출력해주는 printf 라는 함수이다. printf는 표준 입출력 .. 2023. 12. 12.
[C 언어 기초] C 언어 개요 K.N.King 의 C Programming - A Modern Approach 를 공부하며 내용을 정리한 글 입니다. 현재 블럭의 내용은 작성자의 의견 혹은 생각이며, 틀린 내용이 있을 수 있습니다. 지적 감사드립니다. C의 유래 C는 1970년대 초 벨 랩에서 개발된 광범위하게 사용되는 프로그래밍 언어 C는 UNIX 운영체제의 산물이다. UNIX는 어셈블리어로 제작되었는데, 어셈블리어로 제작된 언어들은 디버깅을 하거나 성능을 업그레이드할 때 매우 힘들다는 특징을 갖고 있었다. 이러한 단점 때문에 켄 톰슨(UNIX의 개발자)은 좀 더 고급 언어가 필요하다고 생각했고, B 언어를 제작했다. 후에 데니스 리치(K&R 라고도 부르는 The C Programming language 의 저자)가 UNIX 프로젝.. 2023. 12. 12.