배열(Array) 이란?
배열은 같은 타입의 변수들로 이루어진 유한 집합으로 정의됩니다.
배열을 구성하는 값을 배열 요소(element)라고 하며, 배열 위치를 나타낸 숫자를 인덱스(index)라고 합니다.
1차원 배열
타입 배열 이름[상수];
타입 배열 이름[ ] = {배열 요소 1, 배열 요소 2,....};
2차원 배열
타입 배열 이름[행][열];
포인터(Pointer)
주소 값의 이해
데이터의 주소 값이란 해당 데이터가 저장된 메모리의 시작 주소를 의미합니다.
C언어에서는 이러한 주소 값을 1바이트 크기에 메모리 공간으로 나누어 표현합니다.
예를 들어, int 형 데이터는 4바이트의 크기를 가지지만, int형 데이터의 주소값을 시작 주소 1바이트만 가리킵니다.
C언어에서 포인터(pointer) 란 메모리의 주소 값을 저장하는 변수이며, 포인트 변수라 부르며,
char형 변수가 문자를 저장하고, int형 변수가 정수를 저장하는 것처럼 포인터는 주소값을 저장
예제)
int n = 100; // 변수의 선언
int *ptr = &n ; //포인터의 선언
포인터 연산자
C언어에서 포인터와 연관되어 사용되는 연산자는 다음과 같습니다.
1. 주소 연산자(&)
2. 참조 연산자(*)
주소 연산자
주소 연산자는 반드시 변수의 이름 앞에 사용하며, 해당 변수의 주소 값을 반환한다.
'&' 기호는 엠 퍼센트(empersand)라고 읽으며, 번지 연산자라고 합니다.
참조 연산자
참조 연산자는 포인터의 이름이나 주소 앞에 사용하며, 포인터에 가리키는 주소에 저장된 값을 나타낸다.
포인터의 포인터
포인터의 포인터란 포인터 변수를 가르키는 포인터를 의미합니다.
참조 연산자(*)를 두 번 사용하여 표현하며, 이중 포인터라고도 합니다.
예제)
int n = 100; // 변수 선언
int* ptr_n = &n // 포인터 선언
int* pptr_n = &ptr_n // 포인터의 포인터 생성
void 포인터(void pointer)
void 포인터는 일반적인 포인터 변수와는 달리 대상이 되는 데이터의 타입을 명시하지 않은 포인터
따라서 변수, 함수, 포인터 등 어떠한 값도 가리킬 수 있다
즉, void 포인터는 주소 값을 저장하는 것 이외에도 아무것도 할 수 없는 포인터입니다.
함수 포인터의 포인터 타입은 함수의 반환 값과 매개변수에 의해 결정됩니다.
원형
void func(int, int);
함수 포인터
void (*ptr_func) (int, int);
포인터와 배열의 관계
포인터와 배열은 매우 긴밀한 관계를 맺고 있으며, 어떤 부분에서는 서로를 대체할 수도 있다.
배열의 이름은 그 값을 변경할 수 없는 상수라는 점을 제외하면 포인터와 비슷합니다.
예제)
int arr [3] = {10, 20 ,30}; //배열 선언
int* ptr_arr = arr; //포인터에 배열의 이름을 대입함
printf("%d %d % d\n", arr [0], arr [1], arr [2]);
배열의 포인터 연산
배열의 이름을 포인터처럼 사용하는 예제입니다.
예제)
int arr [3] = {1, 2, 3}; //배열 선언
printf("%d %d %d " , arr [0] , arr [1] , arr [2]);
printf("%d %d %d " , *(arr+0) *(arr+1) *(arr+2));
포인터 배열
포인터 배열이란 배열 요소로 포인터 변수를 가지는 배열을 의미합니다.
즉, 포인터 변수를 저장할 수 있는 배열입니다.
int i , arr_len;
int num1 = 10, num2 = 20, num3 = 30;
int * arr [3] = {&num1, &num2, &num3}; //int형 포인터 배열 선언
arr_len = sizeof(arr) / sizeof(arr [0]);
for(i=0; i <arr_len; i++)
{
printf("%d\n" , *arr [i]);
}
포인터 배열과 배열 포인터의 구분
1. int (*pArr)[3];
// int형 데이터를 저장할 수 있는 2차원 배열을 가리키는 배열 포인터
2. int* pArr [3];
// int형 데이터를 가리킬 수 있는 포인터 변수를 모아 놓은 배열
void (또는 int) main(int argc , char* argv [])
//int형 변수인 argc로 main() 함수에 인수로 전달되는 문자열의 개수를 명시합니다.
//char형 포인터 배열인 argv는 main() 함수에 인수로 전달된 각각의 문자열이 저장된 배열을 가리킨다.
'study > C언어' 카테고리의 다른 글
[c언어] 입출력 정리 (0) | 2020.04.02 |
---|---|
인수 전달 방법 (0) | 2020.03.31 |
함수(Function) 란? (0) | 2020.03.31 |
스택 프레임(Stack frame) (0) | 2020.03.31 |
[C언어] printf 함수와 scanf 기본적인 이해 (0) | 2019.12.20 |