배열 : 특정한 Type의 변수들 집합

int arr[5] = {1,2,3,4,5}

(배열 형) (배열의 이름)[원소 개수]

 

변수는 최상단에 선언되야 한다

컴파일러가 배열을 처리할 때 메모리 공간을 잡아야 하는데 공간의 크기는 상수여야 한다

 

상수 선언

const int a = 3;


배열의 배열 만들기

int arr[3][3] = {1,2,3,4,5,6,7,8,9}

int arr[2][3] = {{1,2,3},{4,5,6}}

다차원 배열은 맨 앞을 제외하고 다른 값들은 지정해줘야 함


a = 10

: 메모리 위치부터 4바이트를 할당하고 그 곳의 데이터를 10으로 바꾼다

int 형 변수가 정수 데이터를 저장하듯이 포인터도 특정한 데이터를 보관하는 변수이다

포인터는 특정한 데이터가 저장된 주소값을 보관하는 변수이다

 

%p는 16진수 형태로 출력

 

포인터는 특정한 데이터의 주소값을 저장한다. 포인터는 주소 값을 저장하는 데이터에 *를 붙여서 정의하고, & 연산자로 특정한 데이터의 메모리 상의 주소값을 알아올 수 있다

 

*는 저장된 주소값에 해당하는 데이터를 가리킨다

 

포인터에는 변수의 주소값이 들어가 있으며 여기에는 메모리가 차지하는 모든 주소의 위치가 있는 것이 아니라 시작 주소만 들어있다

 

상수포인터

const int* const a = &b;

 

포인터 덧셈/뺄셈

 

배열의 각 원소는 메모리 상에 연속으로 존재한다

int main(){
	int arr[5] = {1,2,3,4,5};
    int* parr;
    
    parr = &arr[0];
    
    printf("%d, %d", arr[2], *(parr+2));
    return 0;
}

배열에서

arr

arr[0]

의 주소값은 동일하다

배열의 이름을 사용할 경우 첫 번째 원소를 가리키는 포인터가 된다

 

parr = &arr[0]

parr + 1은 parr의 주소값에 1이 더해지는 것이 아니라 1 * (포인터가 가리키는 타입 크기) 가 더해진다

 

포인터의 포인터

int a;
int *pa;
int **ppa;

pa = &a;
ppa = &pa;

printf("%d, %d, %d", a, *pa, **ppa);

 

2차원 배열

int arr[2][3];

arr[0] > arr[0][0]

arr[1] > arr[1][0]

 

int (*parr)[3];

: int형 이차원 배열이고 배열의 개수가 3개이다.

 

포인터 배열

+ Recent posts