본문 바로가기

C 프로그래밍/C언어 정리

C언어 총정리 6 - 포인터 변수와 선언

메모리 공간은 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