본문 바로가기

전체 글

(64)
[C언어 강좌] #49 구조체 오늘의 강의 내용은 제목에도 쓰여있듯이 구조체입니다. 구조체는 여러가지 변수를 묶어서 하나의 타입을 정의하는 것입니다.int , float , double , char 등등 여러가지 자료형처럼 새로운 자료형을 하나 만드는 것입니다. 다만 형태가 지금까지 배웠던 기본 자료형들과는 다릅니다.배열이 여러개의 변수를 한번에 선언할 수 있듯이 자료형도 여러개의 변수를 한번에 만들 수 있습니다.int형 배열, float형 배열같은것 처럼 배열은 하나의 타입만을 여러개 만들었지만, 구조체는 여러개의 타입을 한번에 만들 수 있습니다.또한 그 타입마다 이름을 붙일 수 있고, 새로운 자료형으로써 사용 가능합니다. 예제를 보면 금방 이해가 될 것입니다. - 구조체 선언 구조체를 선언하는 방법은 다음과 같습니다. 123456..
원더보드 얼마전에 친구가 알려줘서 하게 된 모바일 게임입니다. 전략 + 보드 + RPG요소가 섞인 게임인데 무슨 게임인지 가볍게 보기만 하려다가 빠져서 하고있습니다. 덱을 선택하는 화면입니다. 여기까지만 봤을때는 그냥 클래시로얄을 배낀 게임인줄 알았는데, 실제로 게임을 플레이해보니 클래시로얄과는 많이 달랐습니다. 보드게임과 RPG가 섞인 게임입니다. 서로 턴을 번갈아가면서 캐릭터를 하나씩 움직일 수 있고 상대가 공격 범위에 들어오면 공격됩니다. 게임 플레이도 단순해서 금방 적응하고 플레이하고 있습니다. 생각보다 되게 재밌더라구요. 한번 해보시는걸 추천합니다. 원더보드 링크 주소입니다. https://www.onestore.co.kr/userpoc/game/view?pid=0000718383
[C언어 강좌] #48 함수 포인터 제목에서도 알 수 있듯이 이번 주제는 함수 포인터입니다.함수 포인터라는 이름만 들어도 딱 감이 오시겠지만, 함수포인터는 함수를 가리키는 포인터입니다. 변수만 메모리 공간에 저장되는 게 아니고 함수도 메모리 공간에 저장돼서 호출 시 실행이 됩니다.그렇다면 함수도 메모리 공간에 있으니 당연히 메모리 주소도 존재한다는 뜻이겠죠? 배열의 이름이 배열의 시작주소 값을 나타내는 것 처럼 함수의 이름도 메모리 공간의 주소를 나타냅니다. 123456789#include int add(int a,int b) { return a+b;}int main (void) { printf("%d",add);}cs 두 변수를 더해서 값을 반환하는 add함수를 만들고 함수명을 적어서 출력해봤습니다.출력결과는 add함수의 주소 값이 출력..
[C언어 강좌] #47 배열포인터 배열포인터에 대해 알아봅시다.우선 배열포인터는 포인터배열과는 다른겁니다.이름이 비슷해서 헷갈릴수 있죠. 포인터배열은 저번에도 말했듯이 포인터변수를 담을수 있는 배열입니다.그에비해 이번에 배울 배열포인터는 배열을 가리키는 포인터변수입니다. 사실 근데 배열 이름은 첫번째 원소의 주소를 가리키고있는 상수 포인터라고 배운적이 있잖아요? 그래서arr[i]*(arr+i)이 둘은 같다고 볼수있죠. 배열포인터라는건 결국 그 포인터 상수를 가리키는 포인터라고 볼수 있기때문에 이중포인터라고도 볼수 있습니다.이중포인터에 대해서는 저번 46강에서 설명해드렸었죠. 배열포인터는 보통 다차원배열에 접근할때 쓰입니다. 12345678#include int main(void) { int arr[2][3] = {{0,1,2},{3,4,..
[C언어 강좌] #46 다중 포인터 안녕하세요. 오랜만에 C언어강좌를 다시 써보네요.한 3~4달정도 블로그 포스팅을 쉰것같습니다.오랜만에 써서 갑자기 강좌가 좀 다른느낌이 들수도 있습니다. 양해 부탁드려요 ㅋㅋ 예전 강좌까지는 이미지를 통해서 코드를 보여드렸었는데 굳이 그럴 필요 없었더라고요.12345#include int main(void) { printf("HelloWorld");} cs앞으로는 이런 방식으로 예시를 보여드릴수 있겠습니다.그리고 예전에는 1일에 한개씩 글을 썼지만 이제는 그렇게까지는 못쓸것같네요.조금 불규칙적으로 글을 작성하게 될것같습니다. 그래도 시간날때마다 틈틈히 써보도록 할게요. 아무튼 여기까지는 잡소리였고 강좌 시작하겠습니다.이번에 배워볼 내용은 다중 포인터라는 개념인데요. 말만 들어도 감이 오지않나요?다중포인터..
[C언어 강좌] #45 포인터 배열 포인터 배열에 대해 설명해보겠습니다.포인터를 선언할때도 다른 변수들과 마찬가지로 배열로 선언이 가능합니다.그것을 포인터 배열이라고 하는데 다른 변수들의 배열을 선언할때와 마찬가지로 포인터 배열은 한번에 여러개의 포인터변수를 선언할수 있습니다. 위 예제처럼 해주시면 포인터 배열 선언이 가능합니다.배열 원소 3개에 각각 포인터변수가 있고 포인터변수는 각자 다른 주소들을 넣을수 있습니다. 그리고 각각 가진 주소값을 참조하려면 *연산자가 두번 필요합니다.포인터배열인 arr도 결국 배열의 시작 주소를 담고있는 상수포인터이기때문에 각각 원소에 접근하려면 *연산자를 사용해야하고그 원소에 있는 주소값으로 한번더 접근하려면 *를 또 사용해줘야합니다. 위 예제처럼 배열방식으로 둘다 접근해도 정상적으로 작동하고 *연산자와 ..
[C언어 강좌] #44 동적할당 malloc , free 안녕하세요! 저번편까지는 분명 포인터를 설명하고있었는데 갑자기 이상한놈들이 튀어나왔네요.하지만 이녀석들은 메모리와 많이 관련되있는것들이기 때문에 메모리 주소를 담는 포인터와도 연관이 꽤 있습니다.그래서 포인터를 설명하다말고 malloc이라는것을 설명해드리려합니다. 동적할당은 전역변수나 지역변수와 달리 프로그램이 실행되고 있는 도중에 메모리 공간을 할당할수 있는것입니다. 우선 malloc을 사용하기 위해서는 stdlib.h 라는 헤더파일을 포함해주셔야 합니다.standard library ( 표준 라이브러리 ) 의 약자입니다. 위와같이 stdlib.h를 포함하신후 malloc( 크기 ) 를 호출해주시면 그 크기만큼 메모리 공간을 할당해주고 할당된 메모리공간의 주소를 반환합니다. 그래서 int형 포인터를 만..
[C언어 강좌] #43 배열과 포인터-2 이번편에서는 배열과 포인터에 대해서 설명하지 못한부분을 마저 설명해드리겠습니다.42편과 이어지는 내용이므로 먼저 봐주세요. 배열은 상수형태의 포인터라고 저번편에서 설명해드렸습니다. 근데 배열을 참조할때는 뒤에 [i] 를 붙여서 참조합니다.그리고 배열은 상수형태의 포인터죠. 포인터에도 똑같이 사용할수 있을겁니다.결국 포인터 뒤에 [i]를 붙이면 해당 주소를 참조할수 있다는 얘기가 됩니다. *연산자를 쓰지 않고 배열처럼 참조해봤습니다.[0]은 해당 주소에서 0만큼 이동한다는 얘기니까 결국 그 주소를 참조하는게 됩니다.그래서 *연산자를 이용했을때와 같은결과가 나왔습니다. 이렇게 배열의 첫번째 주소를 담을경우포인터변수인 p를 배열처럼 사용하는것도 가능합니다. 포인터를 배열처럼 쓸수 있지만 배열을 포인터처럼 사용..