Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- corou
- Java
- CSS
- 사이드프로젝트
- 리액트
- 큐
- 크래프톤 정글
- 핀토스
- pintos
- 4기
- JavaScript
- 알고리즘
- 스택
- defee
- Flutter
- 소켓
- 티스토리챌린지
- 오블완
- Vue.js
- TiL
- 자바
- 나만무
- 모션비트
- 자바스크립트
- 시스템콜
- 백준
- 코드트리
- 크래프톤정글
- HTML
- userprog
Archives
- Today
- Total
미새문지
크래프톤 정글 week04, day25 - c언어 포인터, 배열 본문
728x90
- c언어에서는 두 종류의 소스 코드 파일이 있다
- c파일(.c)
- 실제 프로그램을 돌게 하는 로직 코드 파일
- 내용 : 함수, 매크로, 변수 등
- 헤더 파일(.h)
- 여러 소스 코드 파일에 공통적으로 필요한 것들을 저장하는 파일
- 내용 : 함수 선언, 매크로, extern 변수 선언 등
- #include로 헤더 파일을 작성
- c파일(.c)
- 헤더 파일의 필요성
- 함수가 선언된 헤더 파일을 작성하면 여러 파일과 공유가 가능하다.
- 수정할 때 관련 파일이 많으면 모두 고치기 불편하기 때문에 유지 보수에 어려움이 생긴다.
포인터
- 데이터가 저장된 메모리의 주소 값을 저장하는 변수이며, 포인터 변수라고도 부른다.
- 메모리의 주소가 어디인지를 저장하는 전용 변수
- 특징
- 포인터를 통해 프로그램의 변수에 접근하여 읽고 쓰거나, 함수를 실행할 수 있다.
- 자료형을 선언할 때 해당 변수 명의 앞에 별표(*)를 붙이면 앞 자료형을 가리키는 포인터 변수가 된다.
- 이렇게 선언된 포인터 변수에서 주소를 얻고 싶은 변수의 앞에 앰퍼샌드(&)를 붙여주면 그 변수의 주소값이 저장된다.
- 예시
- 기호는 변수를 선언할 때와 변수를 사용할 때에 따라 다르게 작동한다.
- 변수를 선언할 때 *를 사용하면, 그 변수는 포인터 변수임을 나타낸다.
- 예를 들어, int *b는 정수를 가리키는 포인터 b를 선언한다. 그리고 b = &a를 할당하면 b는 a의 메모리 주소를 가리키게 된다.
- 기호는 변수를 선언할 때와 변수를 사용할 때에 따라 다르게 작동한다.
int a = 7;
int *b = &a;
printf("%d", *b); // 7이 출력
배열
- 정적 배열
- 선언하면서 배열의 크기를 할당시키며, 프로그램이 실행되는 동안 크기가 변하지 않는 배열이다.
- 정적 배열은 메모리의 스택 영역에 할당된다.
- 동적 배열은 힙에 메모리가 할당되어 배열의 사용이 끝나면 free로 반드시 배열을 지워줘야 하는데 정적 배열은 스택에 메모리가 할당되어 알아서 사라진다.
- 생성 코드
int arr[10] = {0} // 0을 할당하지 않으면 빈 배열에 쓰레기 값이 들어가게 되어
경고가 뜨기 때문에할당해야 한다.
- 장점
- 코드가 간결해 사용이 간단하고 고정된 메모리 값을 가진 배열이라 접근 속도가 빠르다.
- 단점
- 프로그램이 실행되는 동안 배열의 크기를 변경할 수 없기 때문에 크기를 미리 알고 선언해야 하며, 배열이 너무 크면 메모리가 낭비될 수 있다.
- 동적 배열
- 프로그램 실행 중에 배열의 크기를 변경할 수 있는 배열이다.
- 동적 배열은 메모리의 힙 영역에 할당된다.
- malloc, calloc, realloc 등의 함수를 사용해 메모리를 할당하고 free를 사용해 메모리를 해제한다.
- 생성 코드
int* arr = (int*)malloc(sizeof(int)*10); // malloc을 이용해 배열의 타입 크기*i 만큼
메모리를 할당하게 된다.
free(arr); // 그리고 사용이 끝나면 반드시 배열을 제거
-
- 장점
- 프로그램 실행 중에 배열의 크기를 변경할 수 있어 데이터의 크기가 변동되야 하거나 크기를 미리 알 수 없을 때 유용하다.
- 사용자로부터 입력을 받아 저장하는 경우엔 미리 배열의 크기를 할당할 수 없기 때문에 이럴 때 사용할 수 있다.
- 단점
- 메모리 관리를 직접 해야 하고 메모리는 사용 후에 반드시 삭제해야 한다. 그렇지 않으면 메모리 누수가 발생할 수 있다.
- 메모리를 할당하거나 해제하는 작업은 비용이 많이 들기 때문에 동적 배열을 많이 사용하면 프로그램의 성능이 저하될 수 있다.
- 장점
학습 시간 : 10 ~ 26시
728x90
'크래프톤 정글 > TIL' 카테고리의 다른 글
크래프톤 정글 week04, day27 - RB트리 개념 (1) | 2024.02.20 |
---|---|
크래프톤 정글 week04, day26 - 동적 메모리 할당, CBV, CBR (1) | 2024.02.20 |
크래프톤 정글 week03, day24 - 알고리즘 문제 (1) | 2024.02.20 |
크래프톤 정글 week03, day23 - 퀴즈 복습, 알고리즘 문제 (1) | 2024.02.20 |
크래프톤 정글 week03, day22 - 알고리즘 문제 (1) | 2024.02.20 |