본문 바로가기

프로그래밍/C 기초

(49)
[C언어 강좌] #33 포인터 드디어 이제 포인터를 배울 시간입니다. 전에 변수에도 주소가 있다고 했었던적이 있었습니다.그리고 배열과 그 주소도 연관되어있다고 했었죠.변수가 어디에 위치하고있는지 나타내기 위해서 메모리상에서 각각 모두 주소를 가지고있습니다.우리가 현실에서 살고있는 집도 모두 어디있는지 나타내기 위해서 주소를 가지고있죠.만약 택배를 보낼때 주소를 알고있어야 그 위치로 가서 택배를 건네줄수 있을것입니다.마찬가지로 변수를 저장할때도 주소를 알고있어야 그 주소로 가서 값을 저장할수 있을겁니다. 포인터 변수는 바로 그 주소를 저장해둘수 있습니다. 이번 편에서는 간단하게 포인터를 소개하는정도만 하겠습니다. 포인터변수는 위와같이 선언할수 있습니다.int형의 변수를 담을수 있는 포인터 변수를 선언한것입니다.물론 int형뿐만 아니라 ..
[C언어 강좌] #32 자료형의 변환 (형변환) 자료형의 변환은 char형을 int로 바꾸거나 int를 double로 바꾸는식으로 표현방식을 바꾸는것을 말합니다. 형변환에는 두가지 종류가 있는데자동 형 변환과 강제 형 변환이 있습니다.자동 형 변환은 자동으로 발생하는것이고 강제 형 변환은 프로그래머가 직접 형 변환을 해줘서 강제로 변환이 일어나는겁니다. 위 예제는 자동 형변환이 일어나는 상황입니다.실수형인 double형에 int형 정수인 100이 대입되려할때 자동으로 상수 100은 형 변환이 일어납니다.상수가 자동으로 double형으로 변환되어서 100.0으로 변환되서 대입됩니다. 이런식으로 정수형을 실수형으로 바꿀때는 단순히 뒤에 소수점이 붙는것으로 실수형으로 바뀔수 있습니다.하지만 실수형을 정수형에 넣으려할때는 어떻게 변환될까요? 정수형 변수에 실..
[C언어 강좌] #31 상수 , const const 는 constant의 약자입니다.constant는 변함없는 이라는 뜻을 가지고있죠. 변수의 값을 바꾸는것을 방지하기 위해서 존재하는것이죠. const를 붙이면 그 변수는 상수가 되는것입니다. 변수와 달리 상수는 값을 변경할수 없는 읽기만 할수있는것이죠.상수는 이름을 가진 상수와 이름을 가지지 않는 상수 두가지로 나눌수 있습니다. 이름을 가지지 않는 상수를 리터럴 상수라고합니다.우리는 지금까지 리터럴 상수를 많이 봐왔습니다. 이 예제에 있는 10과 20이 리터럴 상수입니다. 여기서 num에 값을 저장하려면 10과 20의 덧셈연산이 먼저 이뤄져야겠죠.하지만 cpu에서 연산을 하려면 10과 20도 메모리상에 존재해야 연산이 가능합니다.그래서 10과 20을 메모리공간에 상수형태로 저장하고 두 상수의 ..
[C언어 강좌] #30 자료형의 크기 sizeof 안녕하세요. 함수에 대해서 어느정도 설명이 끝났습니다.근데 아직 자료형에서 설명하지 못하고 넘어간부분들이 있어서 마저 설명해보려 합니다. 우선 자료형이란것은 데이터를 어떻게 사용하고 크기를 어느정도로 정해줄지를 표현해주는 용도로 사용되는것입니다.저번에 자료형에 대해서 소개하면서 봤던 int의 경우에는 '크기는 4바이트로 하고 그것을 정수로 사용하겠다' 라고 하는겁니다.그것을 알려주기 위한게 바로 자료형이였죠. 근데 int형이라고 무조건 4바이트일까요? 자료형의 크기는 컴파일러마다 다르게 정해져있습니다.물론 대부분 int형은 4바이트로 사용하긴 합니다만 일부 환경에서는 4바이트가 아닐수도 있다는것이죠. 그래서 만약 int를 4바이트로 생각하고 그것을 기준으로 코드를 작성했다면 int를 2바이트로 생각하는 ..
[C언어 강좌] #29 재귀함수 예제 오늘은 재귀함수를 예제와 함께 설명해보려합니다.재귀함수로 만들수잇는 대표적인 예제로는 팩토리얼이 있습니다.확률과 통계 과목에서 배우셨을거라 생각합니다. 1부터 n까지 순서대로 곱하는것이 팩토리얼이죠. 3! = 3x2x1이런식으로 말입니다. 근데 팩토리얼에서도 재귀적인 특징을 볼수있죠. 5! = 5x4! 4! = 4x3! 3! = 3x2! 2! = 2x1! 1! = 1x0! 어떤가요? 재귀적인 특징이 보이시나요? 팩토리얼에서 계속 또다른 팩토리얼을 부르고있습니다.참고로 0! 은 1입니다. 팩토리얼을 구하는 함수가 있다고 했을때 5팩토리얼을 구할때는 5와 4팩토리얼 함수의 반환값을 곱해주면 됩니다.그리고 4팩토리얼 함수는 4와 3팩토리얼 함수의 반환값을 곱해주면 됩니다.그리고 재귀함수가 무한루프에 빠지지 않..
[C언어 강좌] #28 재귀함수 이번에는 재귀함수를 배워봅시다. 우리가 맨날 쓰는 int main(void)함수가 있습니다. main함수에서 다른 함수를 호출하죠,그렇다는 말은 함수에서 다른 함수를 호출할수 있다는 얘기가되죠.근데 함수가 다른함수가 아닌 자기 자신을 다시 호출하면 어떻게될까요?그게 바로 재귀함수입니다. 오늘은 재귀함수에 대해서 설명해드리겠습니다. 이런식으로 함수속에서 자기 자신을 다시한번 호출하는게 재귀함수입니다.하지만 위와같은 코드는 무한반복을 하게 되버립니다. 그렇기때문에 위 예제처럼 재귀함수가 끝날수 있게 만들어줘야합니다.근데 여기서 헷갈리실수도 있는 부분이 있습니다. 자기 자신을 호출했을때 그냥 처음부터 함수를 다시 실행시키는 형태가 아닙니다!위와같은 그림은 틀렸습니다. 함수를 호출하면 또 하나의 함수가 실행되는..
[C언어 강좌] #27 번외편 - 코딩스타일 안녕하세요. 이번에는 쉬어가는 느낌의 번외편으로 코딩스타일에 대해서 설명해드리려합니다.프로그래밍을 하다보면 다른 프로그래머와 일하게되는일이 많이 있을수 있죠.다른 프로그래머와 공동작업을 할때 충돌이 날수 있는 부분이기도 합니다.기계가 이해하는건 모두 똑같겠지만 코드는 사람이 작성하기때문에 차이를 보이게됩니다. 대표적인 코딩스타일으로는 중괄호위치와 변수이름이 있죠. 중괄호에 따른 대표적인 코딩스타일은 다음과 같은게 있다고합니다. 코드 스타일 if(1){printf("Hello, world!");} BSD if(1) {printf("Hello, world!"); } GNU if(1) {printf("Hello, world!");} K&R 이 이외에도 여러가지가 있는거로 알고있지만 대표적으로 사용하는것은 위 ..
[C언어 강좌] #26 - static 이번에는 static변수에 대해 알아봅시다. 전역변수와 지역변수 모두 static을 쓸수 있습니다. 하지만 일단 지금은 지역변수에 대한 부분만 알아봅시다.전역변수에서의 static은 나중에 설명드리겠습니다. 지역변수에 static은 전역변수의 성질을 갖게됩니다. 하지만 지역변수적인 특성도 가지고있죠.static이 붙게된 지역변수도 선언된 지역변수는 해당 지역에서만 접근이 가능합니다. 이건 지역변수의 특징과 같습니다.하지만 전역변수처럼 프로그램이 종료될때까지 소멸되지 않고 메모리 공간에 존재합니다. 이건 전역변수의 특징과 같지요. 이 예제를 보면 전역변수처럼 변수가 소멸되지 않습니다.static 변수는 한번만 초기화되고 프로그램과 운명을 함께하게됩니다. 하지만 전역변수처럼 모든공간에서 쓸수있는것이 아니라 ..