메모리 공간은 8비트인 1바이트마다 고유한 주소가 있다.
주소연산자 &
&는 피연산자인 변수의 메모리 주소를 반환하는 주소연산자이다.
변수의 주소값 - 형식제어문자 %u 또는 %d로 직접 출력 할수 있다.
- 16진수로 출력할려면 %p를 사용한다.
포인터 변수 선언
포인터 변수 선언에서 자료형과 포인터 변수 이름 사이에 연산자 * 를 삽입한다.
ex) 자료형 *변수이름; int *ptrint; short *ptrint;
변수 자료형이 다르면 그 변수의 주소를 저장하는 포인터의 자료형도 달라야한다.
ptrint = &data; 는 ptrint포인터 변수에 data의 주소값을 저장하는 문장이다.
초기값을 대입하지 않으면 쓰레기값이 들어가므로 포인터 변수에 지정할 특별한 초기값이 없는 경우에 0번 주소값인 NULL로 초기값을 저장한다.
int *ptr = NULL
여러 포인터 변수선언
여러 개의 포인터 변수를 한 번에 선언하기 위해서는 다음과 같이 콤마 이후에 변수마다 *를 앞에 붙여준다.
int *ptr1, *ptr2, *ptr3 는 모두다 int형 포인터이다.
간접연산자 *
포인터 변수가 가리키고 있는 변수를 참조하려면 간접연산자 *를 사용한다.
int data1 = 100, data2;
int *p;
printf("간접참조 출력: %d \n", *ptrint);
*ptrint = 200;
포인터 ptrint가 가리키는 변수가 data라면 *ptrint은 변수 data를 의미한다.
변수 data 자체를 사용해 자신을 참조하는 방식을 직접참조라 한다면, *ptrint를 이용해서 변수 data를 참조하는 방식을 간접참조라 한다.
이중 포인터
포인터 변수의 주소값을 갖는 변수를 이중 포인터라 한다.
int i = 30;
int *pi = &i;
int **dpi = π
pi는 포인터, dpi는 이중 포인터이다
간접 연산자와 증감 연산자 활용
우선순위 | 단항 연산자 | 설명 | 결합성(계산방향) |
1 | a++ , a-- | 후위 증가, 후위 감소 | ->(좌에서 우로) |
2 | ++a , --a & , * |
전위 증가, 전위 감소 주소, 간접 또는 역참조 |
<-(우에서 좌로) |
- *p++ 는 *(p++)이고 (*p)++ 와 다르다.
- ++*p 와 ++(*p)는 같다
- *++p 와 *(++p)는 같다
'C 프로그래밍 > C언어 정리' 카테고리의 다른 글
C 언어 총 정리 8 - 함수 기초 (0) | 2021.08.10 |
---|---|
C언어 총 정리 7 - 배열 (0) | 2021.08.08 |
C언어 정리 - 5 (0) | 2021.08.05 |
C언어 정리 - 4 (0) | 2021.08.02 |
c언어 정리 - 3 (0) | 2021.08.02 |