배열
정의
같은 자료를 나열하여 메모리에 연속으로 저장하여 만든 자료그룹
쉽게 말해서
정수형 변수를 여러개 생성해야 한다고 하자.
기본적으로는 int a1, a2, a3...
식으로 선언을 하겠지만,
배열을 이용해서 선언을 하면 간편하게 생성을 할 수 있다.
선언
자료형태 배열 명 [배열크기] 로 선언
// 크기가 int형(4byte)*10인 int형 배열 i_array 선언
int i_array[10];
초기화
선언과 동시에 초기값 설정 가능
int A[5] = {1, 2, 3, 4, 5};
int A[] = {1, 2, 3, 4, 5};
아래와 같이 크기보다 작은 값을 선언 시,
int A[5] = {1, 2, 3};
A[3], A[4] 는 0값을 가진다.
아래 처럼 개별 초기화도 가능하다.
하지만 A[3]과 A[4]는 쓰레기 값을 가진다.
int A[5];
A[0] = 1;
A[1] = 2;
A[2] = 3;
참고로 A 자체는 A[0]의 주소 즉 &A[0]를 나타낸다.
이는 이후 포인터에서 다시 언급할 것이다.
포인터
정의
변수의 메모리 주소를 가리키는 변수
*는 주소의 값을 참조하는 참조 연산자
&는 변수의 주소를 얻는 연산자
선언
자료형 *변수명;
int *ptr; // int 형 포인터 변수 ptr 선언
초기화
주소 연산자의 이용
int i;
int *ptr = &i;
정수형 변수 i의 주소를 값으로 가지는 ptr 포인터 변수 선언
선언을 한 뒤 ptr과 i를 그림으로 나타내면 위와 같다.
동적 메모리 할당
int *ptr = (int *)malloc(sizeof(int));
int 크기를 가지는 ptr 포인터 변수 선언
크기를 좀더 추가해 포인터를 배열처럼 쓸 수 있다.
int *ptr = (int *)malloc(sizeof(int)*5);
int 5개 만큼의 크기를 가지는 ptr 포인터 변수 선언
여기서 ptr 자체는 ptr[0]의 주소 즉 &ptr[0]를 가리킨다.
배열의 첫 번째 요소를 이용
int A[50];
int *ptr = &A[0];
// 또는
int *ptr2 = A;
또한 문자열의 시작 주소를 지정할 수 도 있는데
char *ptr = "Hello";
ptr에 문자열이 저장되는 것이 아닌
Hello 문자열(배열)의 첫번째 요소의 주소값을 가진다.