일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 연산자
- 포인터
- Direct2D
- Visual Studio
- 배열
- 티스토리
- 김성엽
- VS ERROR
- 문법
- Tips프로그래밍강좌
- 알고리즘
- Windows
- 이지스퍼블리싱
- 리뷰
- c
- 지식나눔강좌
- 백준
- c#
- doit코틀린프로그래밍
- Win32
- tipssoft
- Kotlin
- 프로그래밍
- Javascript
- Tips강좌
- CS
- Desktop
- 함수
- c++
- Programming
- Yesterday
- Today
- Total
목록DEV/C C++ (119)
F.R.I.D.A.Y.
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b0MAKu/btqBBgs90jQ/jUJ1vFxTpnXcvlIksT1bDK/img.png)
함수 포인터 또한 자료형입니다. 모든 자료형은 배열로 만들 수 있다고 했는데요, 이번에는 함수 포인터 배열을 만들어봅니다. # 배열, 함수 포인터를 먼저 알고 있어야 합니다. 선언 방법 먼저 배열의 선언 방법을 되돌아봅니다. type arrayName[length]; // ex) int arr[10]; 함수 포인터의 선언 방법은 다음과 같습니다. returnType (*var)(parameters); // ex) int (*user_abs)(int); returnType: 함수 포인터로 가리킬 함수의 반환형 parameters: 함수 포인터로 가리킬 함수의 인자 만일 printf를 가리킬 수 있는 함수 포인터 배열을 선언하고자 한다면 아래와 같이 작성하면 됩니다. int (*fp)(const char *..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/muMRW/btqBBURMRjk/9jHUbOimgPGrUv5xpC8um1/img.png)
포인터는 신기하게도 함수까지 가리킬 수 있습니다. 어차피 이름이 있으니 이름으로 사용하면 될 텐데 뭐가 좋으냐는 생각을 할 수 있겠지만 이번에 그 생각이 바뀌실 겁니다. # 포인터에 대한 내용을 알고 있어야 합니다. 정적인 것은 싫어요 무엇이든 코드에 명시되어 있다면 이를 수정하기 위해서는 전부 다시 컴파일을 진행해야 합니다. 그러나 포인터를 이용한다면 포인터만 명시되어있지 포인터가 가리키는 내용은 코드에 명시하지 않도록 할 수 있습니다. 따라서 포인터를 사용하면 컴파일을 하지 않고도 실제 작업 내용의 변경이 가능[# 게임을 예로 들면 사소한 버그는 패치로 바로잡곤 합니다. 그런 것이라고 보면 됩니다.]합니다. 함수도 마찬가지입니다. 함수 포인터 함수 포인터는 말 그대로 함수를 가리킬 수 있는 포인터입니..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lsnmO/btqBxAFK8sC/fdlifVgCTVOTaQ18smBkQK/img.png)
이번 시간에는 구조체에서 사용하는 비트 필드에 대해 알아봅니다. 원래 구조체를 설명하고 곧바로 시작할 생각이었는데 공용체 문법에서 먼저 나오게 되었네요 :| # 비트 필드 연산자는 공용체에서도 사용할 수 있어요. 정수 자료형 C언어 자체에서 제공하는 정수 자료형은 기본적으로 다섯 가지[# char, short, int, long, long long]입니다. 주로 int를 사용하지만 가끔씩 long long 자료형을 사용하기도 하지요. long long은 64비트 자료형으로 그 크기는 이미지와 같이 거대한 값을 저장할 수 있습니다.. Min : -9,223,372,036,854,775,808[# 약 -920경] Max : +9,223,372,036,854,775,807[# 약 920경] 그러나 우리는 이렇..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/csAC5N/btqBxz7aoCR/KBJgJ3P81i0KTUbxLbxhT1/img.png)
하나의 공간을 여러 용도로 사용하는 경우가 있습니다. C언어에도 그러한 공간을 만들 수 있도록 문법을 제공하고 있는데요. 오늘 시간에는 공용체(union, 유니온) 문법에 대해 알아봅니다. # 구조체를 먼저 배우고 오면 더욱 좋습니다. 공유하는 공간 회의장이 있다고 생각해봅시다. 이 회의장은 넓어서 행사를 개최할 때도 사용하고 여러 사람들이 모여 아이디어를 펼치는 아이디어룸으로 사용할 수도 있습니다. 어떤 시안에 대해 회의를 할 때도 사용하기도 하죠. 학교에선 다목적 강당으로 생각해도 좋을 것 같습니다. 이 회의장을 하나의 용도로만 사용해야 한다면 다른 용도를 위한 공간을 계속해서 만들어야 하니 비용이 많이 들 것입니다. 공용체(union) 선언하기 공용체 문법은 아래와 같이 기본 구성을 가지고 있습니다..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bTBcZf/btqBuxaNj8d/1VkUtucJdxNDm2yGI7yDg1/img.png)
자료형은 저마다 크기가 존재합니다. C언어의 기중 중 하나로 볼 수 있는 포인터도 예외는 아닌데요, 포인터의 크기는 어떻게 정해졌는지 알아봅니다. 프로그램 버전에 종속적 아래 포스트에서 잠깐 언급한 적이 있습니다. 프로젝트에서 개발하는 프로그램이 32비트인지 확인하는 방법 Windows OS가 설치된 드라이브를 보면 Program Files이란 폴더와 뒤에 (x86)이라 붙은 폴더가 있습니다. 각각의 폴더는 64비트, 32비트로 개발된 프로그램이 설치되는 기본 폴더를 의미합니다. 그렇다면 64비트.. pang2h.tistory.com 지금 개발 중인 프로그램이 32비트라면 포인터는 4Byte, 64비트 프로그램이라면 포인터는 8Byte로 크기가 고정됩니다. 이 크기는 각 운영체제에서 가용할 수 있는 최대..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/egPRxB/btqBtYGI9ik/RXw8X3Tzp33o7JenmkK661/img.png)
모든 자료형은 배열로 만들 수 있습니다. 그리고 동시에 포인터로 가리킬 수 있죠. 이번 시간에는 자주 헷갈리는 문법, 포인터 배열과 배열 포인터를 알아봅니다. 배열 배열 속에 들어있는 각 요소의 자료형은 배열 선언 당시 변수 이름 앞의 자료형입니다. int arr1[10]; char arr2[10]; float arr3[10]; struct data1 arr4[10]; union data2 arr5[10]; 각 배열은 [int, char, float, struct data1, union data2] 타입을 필두로 선언되었습니다. 그럼 포인터를 자료형으로 하는 배열은 어떻게 만들어야 할까요? 헷갈리는 표현 자, 배열 포인터와 포인터 배열이 있습니다. 다음 코드 중 어느 것이 배열 포인터이고 어느 것이 포인..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bqFD9B/btqBs0SsDIL/IoFZQX2eTRvwM86Tlmjn81/img.png)
배열을 만들게 되면 다차원 배열을 만들기도 합니다. 종종 각 요소의 값을 변경해야 하는 경우도 존재합니다. 배열 연산자로 만든 정적 배열과, 포인터와 동적 할당을 이용해 만든 동적 배열을 비교해봅니다. 다차원 배열 선언 포인터와 배열로 2차원[# 포인터에는 맞지 않는 용어이지만 편의상 이렇게 부르겠습니다.] 배열을 만들어 보겠습니다. // using pointer // dynamic array #include #include int main(void){ int **p; p = malloc(sizeof(int*) * 10); for(int i = 0; i
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/NJG8u/btqBoPv7RbG/uXOPbs6hnaZjvwiXh27rvk/img.png)
배열 변수의 이름이 0번 인덱스의 시작 주소인 이유 이번 포스트는 제목 그대로 배열 변수의 이름이 어째서 해당 배열의 0번 인덱스의 주소가 되는지 알아봅니다. 간단해요! int arr[10]; &arr[0]; // 처음 배울 때 주로 사용하는 0번 인덱스의 주소를 가져오는 법.. pang2h.tistory.com 위 글에서는 배열의 첫 요소의 주소는 해당 배열의 이름임을 간단히 설명하고 있습니다. 어째서 이런 결론이 나오게 되는지, 어떤 배경이 있었는지 알아보겠습니다. # 여기에서 (정적)배열은 소스코드에 직접 배열 문법으로 선언된 자료형을 말합니다. 태초에 포인터가 있었다 신께서 세계를 만들 때 법칙을 몇 가지 만들었으니, 그중 하나가 指 법칙이라. 이 법칙은 널리 사용되어야 했으며 충분히 많은 곳에서..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/SJVXZ/btqBqiKTPIh/FlTKJPECNt3VckLEavhsf0/img.png)
변수의 초기화 방법은 각 문법에서 설명했습니다. 다른 언어에서는 잘 사용하고 있었는데 C언어에서는 그 문법을 찾을 수가 없었습니다. 최근에 문법 지원이 이루어지고 있음을 알게 되어, 초기화 문법을 추가로 설명하고자 따로 포스트를 작성합니다. 배열 초기화 우리가 배열을 초기화할 때는 아래와 같이 이용했습니다. int arr1[10] = {0}; int arr2[10] = {1,2,3}; int arr3[10] = {}; 처음이 아닌 중간의 특정 인덱스의 값을 초기화하기 위해서는 일일이 대입하거나, 혹은 그 이전 인덱스에도 초기화 값을 넣어주어야 했습니다. // 4번 째 요소에 값 4를 넣는 초기화 // style 1 int arr1[10] = {0,0,0,4}; // style 2 int arr2[10];..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dEd0sd/btqBj7qRjlv/wdMFNI4ZV6ZqcKxrk4WAK1/img.png)
Prev. 배열(array) part1. default 이전 포스트[# 한참 지난 포스트이긴 하지만..\n 한참 시간이 지난 포스트다 보니 설명하는 어투가 다릅니다. 대표적으로 존댓말로 바뀌었다던지.. 아마도 조만간 개편을 진행해야겠군요.]에서 우리는 자료형과.. pang2h.tistory.com 배열의 심화 학습이라고 생각할 수 있는 포스트입니다. 이전 시간에는 배열의 기본적인 사용법을 알아보았다면 이번 시간에는 다차원 배열에 대해 알아봅니다. 차원 먼저 작성되었던 포인터에서도 언급이 되었던 차원 개념입니다. 우리 세계는 3차원 공간에 1차원의 시간이 더해진[# 뭐 더 나아가면 더 많은 차원이 존재한다는 말도 있지만] 시공간이라고 말합니다. 우리가 점을 표현할 때는 몇 차원이 필요할까요? 차원이 필요하..