본문 바로가기

c언어

[C언어 with Java] malloc, calloc & free, 힙 메모리 할당과 해제! C Prog. with Java C언어를 다루고 있지만, 다른 프로그래밍 언어인 자바와 비교하면서 내용을 구성하고 합니다. 본 글은, 자바를 먼저 어느정도 알고 계시고, 저와 같이 C언어를 공부하고자 하는 분들에게 도움이 되길 바랍니다. 자바에서는 함수나 지역변수, 매개변수의 경우, 스택 메모리 영역에 할당이 되구요. 객체는 생성과 동시에 힙 메모리 영역에 할당이 됩니다. 스택의 경우, 메모리 구조를 보면 호출된 순서대로 쌓이고, 마지막에 쌓이것이 먼저 제거되는 특성을 가지고 있구요. 그래서, 이곳에 존재하는 지역변수나, 매개변수, 그리고 함수의 경우는 제거됨과 동시에 메모리 공간에서 없어집니다. 하지만 힙 메모리의 경우는, 객체가 생성될 때 주로 이용이 되는데, 이곳에 위치하는 경우는 프로그램이 종료가.. 더보기
[C언어 with Java] typedef, 타입에 새로운 이름을 부여하자. C Prog. with Java C언어를 다루고 있지만, 다른 프로그래밍 언어인 자바와 비교하면서 내용을 구성하고 합니다. 본 글은, 자바를 먼저 어느정도 알고 계시고, 저와 같이 C언어를 공부하고자 하는 분들에게 도움이 되길 바랍니다. C언어에서는 새로운 타입의 선언이 가능합니다. 이는 완전히 새로운 자료형(Type)의 선언이 아니라 기존에 있는 자료형에 새로운 이름을 부여하는 겁니다. 키워드 typedef을 사용한 새로운 이름의 부여는 다음과 같이 선언합니다. typedef 자료타입 새로운이름; 이때, 자료타입에는 둘 이상의 식별자로 이루어진 타입도 가능한데요, 이를테면, unsigned 키워드나 const 키워드가 붙은 자료 타입이 있겠습니다. 어떤 방식으로 쓸 수 있는지 한번 보도록 할게요. ty.. 더보기
[C언어 with Java] 배열과 포인터 C Prog. with Java C언어를 다루고 있지만, 다른 프로그래밍 언어인 자바와 비교하면서 내용을 구성하고 합니다. 본 글은, 자바를 먼저 어느정도 알고 계시고, 저와 같이 C언어를 공부하고자 하는 분들에게 도움이 되길 바랍니다. 포인트라는 것을 알았으니, 포인트를 이용해서 배열을 조작해보록 합시다. 우선 소스를 보고 시작할게요. 위의 소스는 int형과 double 타입의 배열을 선언한뒤, 그 각각의 요소에 포인터를 배정했습니다. 그리고 포인터를 찍어서, 배열 요소 각각의 주소를 찍어 보았더니, 위의 색칠한 부분처럼 int형은 4씩 주소가 늘어난 것이 확인되었고, double형은 8씩 늘어난 것을 확인할 수 있었습니다. 이 부분을 미루어 볼때, 배열의 각 요소의 포인터 값은 선언된 배열의 형의 사.. 더보기
[C언어 with Java] 간단히 포인터에 대해서 알아봅시다. C Prog. with Java C언어를 다루고 있지만, 다른 프로그래밍 언어인 자바와 비교하면서 내용을 구성하고 합니다. 본 글은, 자바를 먼저 어느정도 알고 계시고, 저와 같이 C언어를 공부하고자 하는 분들에게 도움이 되길 바랍니다. 자바에서는 포인터라는 개념이 없습니다. 포인터란 메모리에 직접적으로 접근을 해서, 메모리를 조작가능하게 하는 것인데, 포인터를 잘못 만지게 되면, 큰일(?) 납니다. 메모리 공간에는 운영체제가 사용하는 메모리 공간이 있는데, 혹여 사용자가 이 공간을 침범하게 되면, 운영체제에 손상을 일으킬 수도 있게 됩니다. 이를 방지하기 위해서 자바에서는 포인터라는 개념을 개발 당시에 배제한것으로 알고 있습니다. 때문에, 보다 주의깊은 사용법이 필요합니다. ** 물론 최근에 운영체제는.. 더보기
[C언어 with Java] 배열에 대해서 알아보자. C Prog. with Java C언어를 다루고 있지만, 다른 프로그래밍 언어인 자바와 비교하면서 내용을 구성하고 합니다. 본 글은, 자바를 먼저 어느정도 알고 계시고, 저와 같이 C언어를 공부하고자 하는 분들에게 도움이 되길 바랍니다. 우선, 자바를 보도록 할게요. 자바에서는 배열 선언을 다음과 같이 두가지 방식으로 나타낼 수 있습니다. 1. 타입 변수명[] 2. 타입[] 변수명 여기서 1번의 경우는 C언어 방식으로, C언어 사용자를 배려하기 위한 방식으로 생각됩니다. 이클립스를 쓰게 되면 다음과 같이 main 메소드를 만드는데요. public class Test{ public static void main(String[] args){ 바디 } } 경우에 따라서는, 레퍼런스나 강의자의 스타일에 따라, .. 더보기
[C언어 with Java] 메소드의 선언 C Prog. with Java C언어를 다루고 있지만, 다른 프로그래밍 언어인 자바와 비교하면서 내용을 구성하고 합니다. 본 글은, 자바를 먼저 어느정도 알고 계시고, 저와 같이 C언어를 공부하고자 하는 분들에게 도움이 되길 바랍니다. 첫번째, 메소드의 선언부 입니다. JAVA는 다음과 같은 형태로 기본 메소드가 정의 됩니다. public void 메소드명(매개변수){ → 변경자 반환타입 메소드명(매개변수) 바디 } C언어에서는 JAVA와는 다르게 다음과 같은 형태를 띕니다. int 메소드명(매개변수){ → 반환타입 메소드명(매개변수) 바디} 명시하지는 않았지만, return 키워드도 동일하게 사용됩니다. 다른점을 꼽는다면 변경자(modifier) 사용여부가 있겠군요. 하지만 중요하게, 알아야 할것이 .. 더보기
[C언어] 변수의 선언 변수라는것을 이용해서 메모리에 어떤 특수한 값을 저장시킬수 있다고 앞글에서 알아보았는데요. 자. 프로그래밍에 있어서 아주 중요한 변수에 대해서 더 자세히 알아봅시다. 변수를 선언할때 앞글에서 어떻게 선언하였죠? 그렇습니다. 중괄호 내의 맨 앞부분에 변수를 선언하는것이죠. 사실. 최근은 아니지만 발표된 C언어 표준에 따르면 변수선언문의 경우에는 그 위치에 대해서 제한을 두지않는다라고 하는데요. VC++같은 많은 컴파일러가 변수의선언문을 중괄호 앞부분에 위치하는 것을 요구하니까요 지켜주도록 합시다. 참고로 자바에서는 변수선언시의 위치에 대해서는 제한을 두고 있지 않더군요. 자~ 아무튼 앞글에서 int a; 라고 선언을 해줬었는데요. 앞에도 설명을 했었습니다. int 라는것은 정수를 저장가능한 메모리 공간을 .. 더보기
[C언어] 변수와 연산자 기본적으로 수학에서 배운 +, -, *, /(나눗셈) 의 사칙연산이 C언어에서도 제공되고 있는데요. 이번글에서는 이 사칙연산에 대해서 알아봅시다. 우선 다음코드를 보도록 합니다. ------------------------------------------------------------------------------- #include int main(void) { 1+2; return 0; } ------------------------------------------------------------------------------- 자 여기서 1과 2의 덧셈 연산을 시도해보았는데요. 코드를 빌드한후 실행해봅니다. 해보셨나요? 그렇습니다. 저희는 1과 2의 합인 3을 원했는데 결과물은 아무것도 없습니다.. 더보기
[C언어] (실습) printf()문 다음의 결과가 나올수 있도록 코드를 작성해봅시다. 참고로 색칠해 놓은 글자와 숫자들은 %를 이용한 서식문자열을 이용해주세요. 그냥 따옴표안에 타이핑해서 넣으시면 안됩니다. 1. ------------------------------------------------------------------------------ 나의 이름은 고구마입니다. 나이는 12살입니다. 현재 서울특별시(군)에 살고있으며, 1남 1녀중 장남입니다. ------------------------------------------------------------------------------ 2. -----------------------------------------------------------------------------.. 더보기
[C언어] 주석과 서식문자열에 대해서 알아봅시다. 우선적으로 주석에 대해서 알아볼까요? 국어시간에도 주석이란걸 배웠구요. 워드프로세서를 사용하다보면 주석이란것을 접합니다. 간단히 얘기하면 메모정도 되겠네요. C언어 프로그래밍에서 코드작성시에도 메모가 필요합니다. 코드가 간결할때는 내가 작성한 코드에 대해서 잘 알고 있겠죠. 그치만 그 코드가 100줄 1000줄 그이상으로 넘어갈때는 아무리 머리가 좋아도 그 코드를 분석하는데 시간이 많이 걸릴 겁니다. 물론 그 코드를 본인이 작성 했다고 하더라도 말이죠. 그래서 주석이란것을 이용합니다. 주석은 코드내용자체에는 영향을 주지 않으니 요령껏 잘쓴다면 분석하기도 쉽고 깔끔하게 코드를 작성할수 있습니다. 자 주석을 다는 방법에 대해서 알아볼게요. 두가지 방법이 있는데 첫번째로 소개해드릴 방법은 // 입니다. 슬래쉬.. 더보기