일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 배열
- 티스토리
- 연산자
- 김성엽
- c
- 알고리즘
- 프로그래밍
- 지식나눔강좌
- 문법
- 이지스퍼블리싱
- Direct2D
- CS
- 리뷰
- doit코틀린프로그래밍
- 포인터
- 함수
- Kotlin
- Programming
- tipssoft
- c#
- Tips프로그래밍강좌
- Javascript
- Windows
- 백준
- Visual Studio
- Win32
- VS ERROR
- c++
- Tips강좌
- Desktop
- Yesterday
- Today
- Total
목록DEV (265)
F.R.I.D.A.Y.
![](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차원의 시간이 더해진[# 뭐 더 나아가면 더 많은 차원이 존재한다는 말도 있지만] 시공간이라고 말합니다. 우리가 점을 표현할 때는 몇 차원이 필요할까요? 차원이 필요하..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Ksom9/btqBmUQvqwd/XpSa2FMMmGpTf0Jh77ajR0/img.png)
이전 포스트[# 한참 지난 포스트이긴 하지만..\n 한참 시간이 지난 포스트다 보니 설명하는 어투가 다릅니다. 대표적으로 존댓말로 바뀌었다던지.. 아마도 조만간 개편을 진행해야겠군요.]에서 우리는 자료형과 변수에 대해 공부했습니다. 이번 포스트에서는 배열에 대해 공부해봅니다. 변수 선언하기 이전 시간에 공부했던 내용입니다. 변수 하나에 값 하나. 달리 이야기하면 여러 개의 값을 저장하고 싶다면 그 개수만큼의 변수가 필요하다는 말이 되겠죠. 어떤 학급에 30명의 학생이 있다고 생각해봅시다. 이 학생들의 고유 번호를 저장할 변수가 필요합니다. 그렇다면 30명의 정보를 저장할 30개의 변수가 필요하겠군요. int student1, student2, student3, student4, student5, stud..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/biPcRT/btqBkqa40mc/34MZzqR8n8uYLoI9nDvisk/img.png)
지난 시간에 우리는 포인터의 기본적인 내용을 배웠습니다. 포인터(pointer) 잘 배워가던 사람들도 멈추는, 일명 C언어에서 첫 번째 고비라 일컬어지는 포인터입니다. 하다 보면 쉽지만 막상 처음 하면 난생처음 보는 문법에 쓰는 방법도 독특한지라 많이들 힘들어합니다. # 선행으로 함수.. pang2h.tistory.com 이젠 포인터의 한 단계 더 높은, 다차원[# 지난 시간에도 말씀드렸지만 원서의 포인터 파트에서는 차원(dimension)이라는 표현은 없습니다. 역자들이 번역해올 때 정확한 명칭을 정하지 못해 배열의 차원이라는 단어를 가져온 것입니다. 이번 포스트에서는 차원이란 단어로 소개했으므로 차원으로 통일하겠습니다.\n용어를 올바르게 바꾸고자 노력하는 분이 계시니 만일 더 나은 단어나 반대 의견이..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bqkqiZ/btqA57iOUxA/ogmLhlDftjzqBhUNJK1K91/img.png)
이번 시간에는 함수에 인자를 넘길 때 넘기는 방식에 대해 이야기해봅니다. 시작에 앞서 이번 포스트에서는 아래 코드를 이용해 예시를 들도록 하겠습니다. #include void printA(int a){ printf("%d\n", a); } void printAbsA(int a){ printf("%d\n", a > 0 ? a : -a); } int main(void){ int a; scanf("%d", &a); printA(a); printAbsA(a); return 0; } 값을 복사해서 넘기기 : CallByValue 대표적으로 C언어가 추구하는 방식입니다. 한국어로는 값에 의한 전달 모든 파라미터는 값의 복사. 즉, 다른 공간에 같은 값을 생성해 전달합니다. 일단 전달이 이루어지면 전달하는 데이터의 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cnC9SZ/btqA3d300mu/K3cjOOfpfGAhUxO58h8eX1/img.png)
포인터 파트에서 함수 호출 구조에 대해 잠깐 언급한 적이 있습니다. 이 포스트에서 그 내용을 다뤄볼 것입니다. 프로세스의 구조 프로세스[# 프로세스는 운영체제의 로더에 의해 프로그램이 메모리에 올라갈 때 CPU가 실행할 수 있도록 구조를 변경하여 메모리에 올라가 있는 바이트 코드를 의미합니다.]는 Windows 기준으로 하여 아래와 같은 구조[# 정확한 구조는 아니니, 이런 식으로 구성되어 프로세스에 올라간다고만 생각하기 바랍니다. 이 스택 프레임은 플랫폼, 언어, 개발자 구현 방식에 따라 달라질 수 있습니다.]를 가지고 있습니다. 코드 세그먼트 기계어(명령어) 데이터 세그먼트 문자열 상수 목록 전역 변수 static 변수 엑스트라 세그먼트 힙(Heap) 스택(Stack) 코드 세그먼트: 코드 세그먼트에..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/K7vtj/btqAXgOw8fD/kvhLIT2oup40ZrHaJ9Pz9K/img.png)
잘 배워가던 사람들도 멈추는, 일명 C언어에서 첫 번째 고비라 일컬어지는 포인터입니다. 하다 보면 쉽지만 막상 처음 하면 난생처음 보는 문법에 쓰는 방법도 독특한지라 많이들 힘들어합니다. # 선행으로 함수를 알아야 합니다. 사용자로부터 입력받기 우리가 사용자로부터 값을 입력받을 때, 표준 입출력 함수를 사용하곤 합니다. 대표적으로 scanf[# scanf_s 또한 표준입니다. scanf_s에 대한 자세한 내용은 https://pang2h.tistory.com/200을 참고하세요.]가 존재하겠네요. #include int main(void){ int num; scanf("%d", &num); printf("%d\n", num); return 0; } 그렇다면 우리도 scanf 함수처럼 값을 입력받도록 해보..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/1HBIl/btqAXgNGZgX/2OuFFlp7AqAoGezc5GBQOK/img.jpg)
이번 포스트는 제목 그대로 배열 변수의 이름이 어째서 해당 배열의 0번 인덱스의 주소가 되는지 알아봅니다. 간단해요! int arr[10]; &arr[0]; // 처음 배울 때 주로 사용하는 0번 인덱스의 주소를 가져오는 법입니다. &*(arr + 0); // 처음 코드는 위와 같이 변경할 수 있습니다. &*(arr); // 0은 더하든 말던 값의 변화가 없으므로 지울 수 있습니다. (arr); /* 간접 참조 연산자(*)와 주소 연산자(&)는 곱셈과 나눗셈처럼 서로 상반 관계입니다. 따라서 함께 없앨 수 있습니다. */ arr; // 불필요한 괄호를 지워줍니다. // 따라서 // &arr[0] == arr 입니다. 이 내용은 포인터를 배우다보면 알게되는 내용입니다 :) 이 표현법을 알게 되면 대괄호를 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/ECmTU/btqAQNzIqpO/XKDGHEQEPeQivWNORxnHuk/img.png)
C언어에는 typedef라 불리는 기존 자료형을 다시 정의하는 키워드가 존재합니다. 이 포스트에서는 이 typedef에 대해 알아봅니다. 나도 별명을 가지고 싶다 변수는 다양한 이름으로 선언해서 프로그램의 핵심 중추로 작용합니다. 그때, 자료형들이 시샘이 났습니다. 그래서 데니스 리치[# C언어의 창시자입니다. 자세한 내용은 링크를 참고하세요.]는 불만을 해소해주고자 만든 키워드가 typedef라고 보시면 좋겠습니다. int var1; char var2; double real1; 변수를 선언하는 방법입니다. typedef 또한 마찬가지로 작성할 수 있습니다. typedef int integer; 이렇게 작성하면 int의 별명으로서 integer라는 자료형이 새롭게 구현[# 물론 기반은 int이지만]됩니다..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Pewbj/btqAQlo0sU1/KJTQiVXyjH6jDCBkpZZFQk/img.png)
일상생활에서 우리는 비슷한 부류끼리 그룹을 지어 관리하곤 합니다. 프로그래밍에서도 예외는 아닌데요, 오늘은 구조체에 대해 배워봅니다. 성적 관리하기 학생의 성적을 관리하는 프로그램을 만든다고 생각해봅니다. 국/영/수/사/과 다섯 가지 항목을 관리한다고 했을 때, 우리는 변수 다섯 개가 필요함을 느낄 것입니다. #include int main(void){ int korean, english, math, society, science; scanf("%d %d %d %d %d", &korean, &english, &math, &society, &science); printf("국어 : %d\n", korean); printf("영어 : %d\n", english); printf("수학 : %d\n", math..