C언어 5

초급 C언어 공부 - 5.동적 메모리 할당

오늘 제가 배운 내용은 동적 메모리입니다. C++에서 새로운 키워드인 new&delete를 공부하려고 보니 C언어의 malloc&free가 기억이 안나서 다시 공부했습니다.. 프로그램이 메모리를 할당 받는 방식은 두 가지의 방법이 있습니다. 우선 우리가 C언어를 계속 공부하면서 자연스럽게 사용하던 정적 할당입니다. 예로 int나 double을 사용하면 4바이트 또는 8바이트를 할당 받는다는 것을 여러분은 알고 계실껍니다. 그렇다면 이러한 정적 할당이 뭐가 문제여서 동적 할당이 등장했냐고 물어보시면 정적 할당의 단점은 프로그램 실행 전에 먼저 정해진 메모리를 할당 받는게 문제입니다. 작은 메모리라면 별 신경 안쓰셔도 되겠지만 프로그램이 커지면 커질 수록 낭비되는 메모리도 많을 것이고 초과하는 메모리도 있을..

초급 C언어 공부 - 4.구조체(1)

우리가 알고 있는 자료형에는 int나 char 같은 기본 자료형이 있습니다. 기본 자료형 이외에도 파생 자료형으로는 포인터와 배열, 열거형 그리고 오늘 배울 구조체가 있습니다. 즉 구조체는 하나의 자료형입니다. 어떤 자료형이냐고 물어보시면 구조체는 다른 자료형을 묶기 위해서 사용하는 자료형입니다. 같은 자료형을 묶는게 배열이라면 다른 자료형을 묶는건 구조체입니다. 자료형은 struct라는 키워드로 선언하며 여러개의 멤버를 가집니다. 예시로 학생을 구조체로 만들어보면 struct student { char name[10]; int number; double grade; }; 이런 식으로 선언할 수 있습니다. 선언하였다고 해서 변수가 선언된게 아닙니다. 지금 위의 식은 그저 틀만 만들었다고 보시면 됩니다. ..

초급 C언어 공부 - 3.포인터(1)

오늘은 포인터에 대해서 간략하게 설명드리겠습니다. 간단하게 포인터란 메모리에 있는 데이터의 주소를 가지고 있는 변수입니다. 메모리 상에 있는 데이터들은 모두 주소를 가지고 있습니다. 마치 우리들이 사는 집의 주소와 같은 형식으로요 그런데 포인터는 데이터 값을 가지고 있는게 아니고 주소값을 가지고 있는 변수인겁니다. 굳이 왜 값이 아닌 주소를 가지고 있냐면 바로, 데이터의 복사를 피하고 복잡한 자료구조를 효율적으로 처리하며 메모리를 효율적으로 쓰기 위해서입니다. 즉 효율적이기 위해서 쓰는것입니다. 포인터를 보기 이전에 우리가 알고있는 변수는 모두 주소값을 가지고 있습니다. 우리가 변수를 선언하는 순간 그 변수는 주소를 부여받고 거기에 데이터값을 저장하는거지요 자료형을 보시다 싶이 자료형마다 데이터 크기가 ..

초급 C언어 공부 - 2.매크로 함수

오늘 배울 내용은 매크로 함수 입니다. 매크로 함수를 배우기 앞서 전처리기라는 것에 대해서 알아둬야 하는데 이 전처리기는 컴파일 하기 앞서 소스파일을 처리하는 컴파일러의 한 부분입니다. 자동으로 실행되며 수정된 소스 파일을 생산합니다. 보통은 컴파일이 끝나면 자동으로 삭제되기 때문에 사용자에게는 보이지 않습니다. 전처리기는 # 기호로 시작하는 전처리기 지시어를 처리합니다. 가까운 예로 #include가 있습니다. 지시어 의미 #define 매크로 정의 #include 파일 포함 #undef 매크로 정의 해제 #if 조건이 참일 경우 #else 조건이 거짓일 경우 #line 행 번호 출력 #ifdef 매크로가 정의되어 있는 경우 #ifndef 매크로가 정의되어 있지 않은 경우 #endif 조건 처리 문장 ..

초급 C언어 공부 - 1.함수

C언어 함수에 대해서 과거에 내가 정리한 글이 있어서 가져왔다. 따라서 틀린 점도 많고 말투도 다르다. 함수는 입력을 값을 처리하여 출력하는 모듈? 이라고 생각하시면 됩니다. 함수 안에는 여러가지 문장들이 모여있고 이러한 함수들이 모여서 하나의 프로그램이 되는 거지요 입력 1.문장 2.문장 ↓ 위에서 아래로 순차적 진행 3.문장 출력 이런 형태가 됩니다. 함수의 호출은 예외를 제외하고 모든 함수는 main()으로부터 호출이 됩니다 우리가 직접 작성한 사용자 정의 함수나 외부에서 불러와 쓰는 라이브러리 함수 전부가 main() 함수로부터 호출 되기 때문에 main()함수가 가장 먼저 호출 되겠죠? 그럼 누가 main()함수를 호출하는 걸까요? 바로 운영체제가 호출한답니다. 또한 함수는 계속 몇번이고 필요한..