자료 구조란 데이터 요소에 더 효율적으로 접근하고 수정할 수 있도록 해주는 것이다.
abstraction(추상화)란 Too abstract와 Too concrete의 중간 지점이다.
필요한 부분만 보여주고 나머지는 숨기는 것
data는 정보를 표현하는 방식으로 사람이나 기계에게 더 분석이 용이하고 더 상호작용이 잘 되도록한다.
Abstract Data Type의 약자로 Data와 Operation을 합친 개념이다.
프로그램을 실행하면 Storage에서 Memory로 load한 후 CPU에서 연산을 한다.
다음은 각 type별로 메모리에 할당되는 크기이다.
int int_val; // sizeof(int) is 4 bytes
float float_val; // sizeof(float) is 4 bytes
short short_val; // sizeof(short) is 2 bytes
char char_val; // sizeof(char) is 1 bytes
1차원 배열
1차원 배열은 유한한 고정된 크기의 동종의 아이템들로 이루어진 데이터 타입이다.
1차원 배열의 주소를 구하는 식
Address[index] = BaseAddress + Index*SizeOfElement
int values[5];
위처럼 정의된 배열이 있다고 하자.
배열의 첫 번째 주소는 7000일 때 values[3]의 주소를 구해보자.
values[3]의 주소 = 7000 + 3*4 = 7012
2차원 배열
2차원 배열의 경우엔 선형 구조로 행을 이어붙여 구성된다.

2차원 배열의 주소를 구하는 식
Address[row][col] = BaseAddress + row X [column] X SizeOfElement + col X SizeOfElement
int intArray[5][12];
위처럼 배열이 정의 되었을 때 intArray[3][7]의 주소는? (BaseAddress = 2000)
2000 + 3 X 12 X 4 + 7 X 4 = 2172