- 참치군
- ?
- stalk.io
- :: 2013년, 스리는 여섯살
- 웹 강좌
- 점프 투 파이썬
- 요니나의 대학생 재테크
- This is CS50
- 애자일 이야기
- isao의 IT,게임번역소
- 소프트웨어 이야기
- Color Scripter
- 어디를 가든지 마음을 다해 가라
- VisuAlgo
- 서울대 평생교육원
- 몽환
- RegExr: Learn, Build, & Test R…
- Hello, Stranger :D
- I Like Exploit
- Z3alous Security Story
- Project Euler
- Blog
- pieces of code
- window 쪼물딱 거리기
- IT - Informatics Alphabet
- rop
- 국제 정보교육센터 I2sec 대구 1기
- This is the moment. :)
- blackmoon
- z3alous는 세상에 소리 z3alous~
- Acord
- FORENSIC-PROOF
- 어셈블리
- Outsider's Dev Story
- Open Tutorials
- 코드라이언
- 컴퓨터 그래픽스와 3D 프린팅
- HACKABILITY
- Lee, Jae-Hong
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 추상데이터타입
- 블루블랙
- 공간복잡도
- Visual Studio
- 동대구
- 소켓
- BOF
- 오지총
- 펌
- 염색
- Wireshark
- 레지스터
- Hello World
- 시간복잡도
- C언어
- ubuntu
- 피보나치
- Packet
- 베이스
- 디버깅
- 컴파일러
- 창의공학설계
- 발표
- Debug
- 호출규약
- 알고리즘
- Calling Convention
- 파이썬
- 탈색
- 버퍼오버플로우
- Today
- Total
c0smicb0y
[자료구조] Array (배열) 본문
배열
정의 : 인덱스와 값 <index, value> 의 쌍으로 구성된 집합.
배열의 추상 데이터 타입(ADT)
Object : 집합 (아무 자료형)에 속한 값이 존재하는 <, >쌍의 집합. Fuctions : 모든 , , , 에 대하여
= return 차원의 배열.
= if () return 배열 의 인덱스 값에 포함되어 있는 항목. else return 에러.
= if () return 새로운 쌍 <, >가 삽입된 배열 . else return 에러. |
C 언어에서의 배열
1. 1차원 배열
C언어에서 1차원 배열을 선언하는 방법은 두가지가 있다.
1 2 | int array[5]; int *parray[5]; | cs |
첫 번째 배열은 5개의 정수를 선언한것이고,
두 번째 배열은 정수에 대한 5개의 포인터를 정의하였다.
C에서는 모든 배열의 인덱스는 0에서 시작하므로 첫번째 배열의 각각의 원소는 array[0], array[1], array[2], array[3], array[4]로서, 각각 하나의 정수 값을 포함한다.
마찬가지로 parray의 배열 원소는 parray[0], parray[1], parray[2], parray[3], parray[4]로서, 각각 하나의 정수에 대한 포인터를 포함한다.
배열의 첫 번째 원소인 array[0]의 주소는 기본 주소(base address)라 한다. 각 배열이름름을 가리키는 포인터이다.
사용하는 컴퓨터의 정수의 크기를 라고 하면 array[]의 주소는 가 된다(는 기본 주소). 그러므로 배열의 타입과 관계없이 (array + )와 &array[i]는 항상 같다. 그러므로 *(parray + )와 parray[]도 항상 같다.
2. 다차원 배열
C언어는 다차원 배열을 표현하기 위하여 배열의 배열을 사용하고 있다. 다음과 같이 2차원 배열을 선언하면,
1 | int 2dArray[2][4]; | cs |
크기가 2인 1차원배열 2dArray가 생성되고 이 2dArray의 각 원소는 크기가 4인 1차원 배열이다.
3. 동적 배열
프로그램에서 배열의 크기가 미리 정해놓은 것을 넘어갈 수도 있고, 너무 커서 사용되지 않는 부분이 있어 낭비될 수도 있기 때문에 C에서는 프로그램의 실행시간(runtime) 때 할당해주는 크기를 정할 수 있는 동적 배열 라이브러리를 제공한다.
stdlib.h 헤더파일에 정의되어 있다.
자주 사용하는 함수는
void* malloc(size_t size) 인데 size만큼의 메모리를 할당한다.
1차원 배열은 다음과 같이 동적 할당 할 수 있다.
1 2 | int *list; list = (int*)malloc(sizeof(int) * 5); | cs |
정수형 포인터 list에 5개 만큼의 정수의 크기를 가지는 배열을 동적 할당한 것이다.
다차원 배열은 1차원 배열의 1차원 배열이므로, 한 차원씩 동적 할당을 해주면 된다.
1 2 3 4 5 6 7 | int **list; int i; list = (int**)malloc(sizeof(int*) * 5); for (i = 0; i < 5; i++) list[i] = (int*)malloc(sizeof(int)*3)); | cs |
동적 할당으로 배열을 만든 후 더 이상 쓰지 않을 때도 그 부분의 메모리는 계속 할당이 되어 있기 때문에 더 이상 쓰지 않을 때는 free 함수를 써서 할당된 공간을 해제시키는 것이 좋다.
1 2 3 4 5 6 7 8 9 | int *list; list = (int*)malloc(sizeof(int) * 5); ... //사용완료 free(list); | cs |
다차원 배열은 가장 마지막에 동적 할당한 부분부터 free 함수를 써주면 된다. 동적 할당을 해준 역순으로 할당 해제를 해준다고 생각하면 쉽다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | int **list; int i; list = (int**)malloc(sizeof(int*) * 5); for (i = 0; i < 5; i++) list[i] = (int*)malloc(sizeof(int)*3)); ... //사용완료 for (i = 0; i < 5; i++) free(list[i]); free(list); | cs |
'프로그래밍 > 자료구조' 카테고리의 다른 글
[자료구조] Structure & Union (구조체와 유니언) (0) | 2015.01.31 |
---|---|
[자료구조] 기본개념 (0) | 2015.01.10 |