C 선언문 구성 요소
C언어의 선언문은 포인터, 직접 선언자, 생성자로 구성된다. (선언문은 정의문과는 구분되지만 이 글에서는 선언문을 정의문과 같은 의미로 해석한다. 정의문은 새 객체를 생성할때, 선언문은 만들어진 객체를 참조할 때 사용한다.)
포인터는 다음의 표현 방법으로 나타낸다.
* //char *ptr;
*const //char *const ptr;
*volatile //int *volatile ptr;
*const volatile //int *const volatile ptr;
*volatile const //int *volatile const ptr;
//etc..
Plain Text
복사
식별자는 변수의 이름, 함수의 이름, 배열의 이름 등을 나타낸다.
식별자 // 변수 x
식별자[사이즈] // 크기 4의 배열 arr[4]
식별자(인자) // x,y를 인자로 받는 함수 add(x,y)
Plain Text
복사
식별자에는 어떤 자료를 나타내는 지에 대한 자료형도 있어야 한다.
int x // 정수형 변수 선언
char x // 문자형 변수 선언
float x // 실수형 변수 선언
//etc..
Plain Text
복사
데이터를 다루는 방식에 대한 것들이다.
static //정적 변수로 만듦
extern //외부 변수를 사용
register //레지스터 메모리를 사용
Plain Text
복사
타입 한정자라는 것들도 있다.
const // 수정이 불가한 읽기 전용 값으로 만듦
volatile // 컴파일러의 최적화 기능을 끔
restrict // 다른 변수나 포인터의 접근을 막음
Plain Text
복사
이 외에도 선언문에서는 = 을 이용해 초기화를 해줄 수 있고, 콤마(,)를 사용해 여러 변수를 한 줄에 선언해 줄 수도 있다. 선언문의 끝은 세미콜론(;)으로 마친다.
선언문 읽는 법
선언문 규칙
<font color="gray">1. 맨 왼쪽에 있는 식별자부터 읽는다.
2. 대괄호 \[ ] 가 있으면 배열임을 염두에 둔다.
3. 소괄호 ( ) 안에 있는 것은 덩어리로 해석한다.
4. 식별자 왼쪽에 애스터리스크가 붙어 있으면 "~를 가리키는 포인터"로 해석한다. 단, 함수 반환값이 포인터일 경우 오른쪽에 붙어 있다.
5. 포인터일 경우 어떤 자료형을 가리키는지 살펴본다.
5-1. 단, 오른쪽에 함수를 표시하는 ( ) 가 있으면 "함수를 가리키는~"으로 해석한다.
5-2. 함수를 가리킨다면, 그 함수는 어떤 자료형을 반환하는지 살펴본다.
6. <font color="pink">const</font> 는 그 사이에 어떤 것이 있든 <font color="pink">\*</font> 와의 상대적 위치를 기준으로 생각한다.</font>
int *const ptr //상수 포인터, 다른 주소값 할당 불가능
int const *ptr //상수 참조값, 다른 주소값 할당은 되나 참조 값 변경 불가능
const int *ptr //*와 const의 상대적 위치만을 살펴보므로 상수 참조값
Plain Text
복사
선언문 예시
int *const *(*ptr)(int nbr);
Plain Text
복사
<font color="skyblue">ptr</font>
<font color="skyblue">포인터</font> ptr
<font color="skyblue">함수(를 가리키는)</font> 포인터 ptr
<font color="pink">int형 nbr을 인자로 받는</font> 함수 포인터 ptr
<font color="pink">int형 포인터를 반환하고</font> <font color="orange">int형 nbr을 인자로 받는 </font> 함수 포인터 ptr
<font color="orange">int형 <font color="pink">포인터를 가리키는</font> 포인터를 반환하고 int형 nbr을 인자로 받는</font> 함수 포인터 ptr
<font color="orange">int형 <font color="pink">상수</font> 포인터를 가리키는 포인터를 반환하고 int형 nbr을 인자로 받는</font> 함수 포인터 ptr
int형 상수 포인터를 가리키는 포인터를 반환하고 int형 nbr을 인자로 받는 함수 포인터 ptr
char *(*arr[42])(int *ptr);
Plain Text
복사
<font color="skyblue">arr</font>
<font color="skyblue">42 크기의 배열</font> arr
42 크기의 <font color="skyblue">포인터</font> 배열 arr
42 크기의 <font color="skyblue">함수</font> 포인터 배열 arr
<font color="pink">int형 포인터 ptr을 인자로 받는</font> 42 크기의 함수 포인터 배열 arr
<font color="pink">char형 포인터를 반환하고 </font> <font color="orange">int형 포인터 ptr을 인자로 받는</font> 42 크기의 함수 포인터 배열 arr
char형 포인터를 반환하고 int형 포인터 ptr을 인자로 받는 42 크기의 함수 포인터 배열 arr