일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |
- 타입스크립트
- RT scheduling
- 자바스크립트
- vue3
- Machine Learning
- 이진탐색
- 배열
- 해시테이블
- 큐
- C
- 연결리스트
- alexnet
- 프론트엔드
- RxJS
- cors
- 연결 리스트
- pytorch
- 자료구조
- 웹팩
- 알고리즘
- 프로그래머스
- 컨테이너
- 프로세스
- 스택
- 포인터
- APOLLO
- 릿코드
- 브라우저
- GraphQL
- 코딩테스트
- Today
- Total
목록C (20)
프린세스 다이어리
1. 구조체란 여러 개의 변수를 묶어서 하나의 객체를 표현하고자 할 때 구조체를 사용할 수 있다. 배열과 달리, 서로 다른 특성을 같이 묶어서 객체의 성격을 표현하는 것이다. 캐릭터, 몬스터, 좌표 등 다양한 객체를 모두 정의할 수 있다. 구조체는 다음과 같이 선언할 수 있다. struct 구조체명 { 자료형1 변수명1; 자료형2 변수명2; } 2. 구조체의 정의 방법 한 명의 학생에 대한 정보를 담고 있는 구조체를 만들어 본다면 다음과 같다. #include struct Student { char studentId[10]; char name[10]; int grade; char major[100]; }; 위와 같이 프로그램에서 요구하는 특성에 맞게 객체의 특성을 정의할 수 있다. int main(voi..
1. 함수 포인터란 함수 또한 다른 자료형처럼 포인터 주소를 가진다. 배열의 이름이 메모리 주소를 반환하는 것처럼, 함수의 이름도 내부적으로 컴퓨터 메모리에 기록이 된다. 함수 포인터는 특정한 함수의 반환 자료형을 지정하는 방식으로 선언할 수 있다. 함수 포인터를 하나 만들어서, 특정한 함수 자체를 가리키도록 할 수 있다. 반환 자료형과 매개변수는 해당 함수가 가지고 있던 것으로 가져와야 한다. 반환 자료형(*함수 포인터 이름)(매개변수) = 함수명; #include void func() { printf("yess"); } int main(void) { printf("%p \n", func); } 0x100417f40 이렇게 간단한 함수를 만들고, 함수의 이름을 넣어서 출력하도록 만들면 반환되는 값으로 ..
1. 동적 메모리 할당의 개념과, 함수 malloc() 일반적으로는 C에서 배열을 선언할 때 사전에 적절한 크기만큼 할당해주어야 한다. int a[20] = "hello world"; 그런데 항상 사전에 메모리를 할당하는 게 아니라, 프로그램 실행 도중에 필요할 때 메모리를 할당해야 할 때가 있을 것이다. 그 경우에 동적 메모리 할당을 사용해야 한다. C에서는 malloc() 함수를 이용해 원하는 만큼의 메모리 공간을 확보할 수 있다. 포인터 = malloc(할당할 바이트 크기); Memory allocation의 약자인 malloc 함수는 메모리 할당에 성공하면 주소를 반환하고, 그렇지 않으면 null을 반환한다. 현재 컴퓨터의 메인 메모리, 즉 램을 확인한 다음, 거기서 현재 할당하고자 하는 메모리를..
1. 2차원 배열 2차원 배열은 행렬 데이터를 표현할 때, 그래프 알고리즘을 처리할 때, 다수의 실생활 데이터를 처리할 때 등 사용된다. 흔히 우리가 보는 표 구조가 2차원 배열과 흡사하다. 2차원 배열은 1차원 배열이 중첩되었다는 의미로, [] 대괄호를 두 번 연속하여 쓴다. 자료형 배열 이름[행][열] = { {값, 값, 값,... }, {값, 값, 값,...},... } 자료형과 배열 이름을 정해주고, 행과 열이 어느 정도의 크기를 가지고 있는지 써 줘야 한다. 가령 가로 10, 세로 10의 크기를 가지고 있는 100개의 정수형 값이 들어가는 2차원 배열이면 int a[10][10]; 라고 정의해준다. 초기화하고 싶은 값이 있다면 {} 중괄호를 중첩하여 값을 넣어준다. 2차원 배열 또한 인덱스는 0..
1. 메모리의 서로 다른 4가지 영역 프로그램을 실행하기 위해서는 일단 프로그램이 메모리에 적재돼야 한다. 그러고 나서 CPU가 메모리를 한 줄 한 줄 읽어서 프로그램을 실행하는 것. 따라서 특정 프로그램이 실행되려면 프로그램을 충당할 만큼의 메모리 공간이 필요하다. 흔히 8G, 16G 컴퓨터 메모리가 있는데, 프로그램을 하나 클릭해서 실행하려고 하면 프로그램이 메모리에 적재돼서 돌아간다. 일반적인 컴퓨터의 운영체제는 메모리 공간을 4가지로 구분하여 관리한다. 이 공간들은 서로 다른 역할을 가지고 있다. 코드 영역 한 줄 한 줄 실행할 수 있는 소스코드 데이터 영역 변수 중에서 전역 변수와 정적 변수를 담고 있다. 힙 영역 동적 할당 변수를 담는다. 스택 영역 함수마다 담고 있는 지역변수, 매개변수 등을..
1. 문자열의 개념 앞서 살펴보았듯 C에서는 문자열이 따로 없고 문자의 배열로 이를 표현한다. 특이점은 문자열은 컴퓨터 메모리 구조 상 마지막에 널(null) 값을 포함한다는 점이다. 어떠한 값도 의미 있지 않다는 의미다. 0 1 2 3 4 5 6 7 8 9 H I E U N J I N ₩0 (\0) null값이 들어가는 이유는 문자열의 마지막임을 알리기 위해서다. 그래서 printf() 함수를 실행하면, 컴퓨터는 내부적으로 null값을 만날 때까지 출력하는 것이다. 2. 문자열 리터럴과 포인터 문자열 형태로 포인터를 사용할 수 있다. 배열 형태가 아닌, 포인터 자체에 문자열을 마치 상수처럼 읽기 전용으로 넣는 것이다. 이 때, 큰따옴표 안에 문자열을 넣게 되는데 이걸 문자열 리터럴 이라고 하고, 컴파일..
1. 아스키코드 C에서 문자는 아스키코드를 따른다. 아스키코드는 0~127 중에 1바이트로 구성되며, 주요 문자를 출력하도록 해 준다. 0 ~ 9 48 ~ 57 A ~ Z 65 ~ 90 a ~ z 97 ~ 122 #include int main(void) { char a = 65; printf("%c\n", a); } 이렇게 아스키코드로 65에 해당하는 하나의 문자를 바로 출력하도록 할 수도 있다. 문자 입출력에서 형식 지정자로 %c를 사용한다. 컴퓨터는 결국 내부적으로 숫자로 처리하고 있다는 것이다. 모든 문자열은 내부적으로 숫자로 표현되기 때문에 int형을 사용하여 문자를 입력받을 수 있다. 2. 버퍼가 무엇인가 사용자로부터 1개의 문자를 입력받을 때는 get character 라는 의미로 getch..
1. 포인터의 개념 이전까지 공부한 변수는 그 자체로 자신의 자료형에 맞는 값을 저장한다. int, double, char 등이 그 예시다. 포인터는 메모리의 주소 값 자체를 저장한다. int형 변수를 만들었다고 하면, 컴퓨터 어딘가에 int가 저장된 공간이 있을 것이고, 그것의 메모리 주소를 가리키고 있는 포인터도 있다. 포인터는 메모리 주소의 값을 가지기 때문에 컴퓨터 메모리에 바로 접근할 수 있다. int a = 5; int 5 값을 가지는 a 변수가 있고 이것의 메모리 주소는 0xAFB03912 라고 가정해 보자. int *b = &a; 포인터는 int *b = &a; 처럼 선언할 때 * 연산자를 사용하여 포인터 변수임을 표현한다. 이 의미는 포인터 변수 b가 a의 메모리 주소를 가리키고 있다는 ..