본문 바로가기

Language/C

포인터 연산


●포인터 와 포인터 변수의 연산

포인터 와 포인터 변수의 연산은 상당히 제한적이다. 포인터 변수에 포인터를 할당할때는 가리키는 자료형이 일치해야만 한다.

ex)int in;

float *fp = ∈ //이는 불가능한 연산이다.

○포인터 또는 포인터 변수에 정수값을 더할수 있다.

예를 들어서int in;

int *ip = ∈

in=100번지

ip=100번지

이라는 포인터가 선언 되었다고 가정한다면 ip안에 in변수의 시작 주소값이 할당 될 것이다. 이를 100이라고 보자. 이면, 와 같다 여기서 ip+1;을 수행한다면 100+1이 수행 되는 것이 아니라 100+(1*4)가 연산이 되는 것이다. 여기서 한마디로

포인터 + 정수*sizeof(*포인터)

로 연산이 수행되는 것이다. 여기서 sizeof(*포인터)는 포인터 변수가 할당되어 있는 자료형의 크기만큼 더한다는 말이 된다. 정수 in형은 4byte 이기 때문에 1과 4를 먼저 곱한다음 *ip 안에 있는 100번지랑 더해지는 것이다 즉 104라는 값으로 되는 것이다.

○포인터 또는 포인터 변수끼리 차를 구할수 있다.

예를 들어서 int a,b;

int *ap, *bp;

ap=100번지

bp=104번지

ap = &a;

bp = &b;

bp - ap;

라고 선언이 되었다고 가정했을 때 차의 연산은 다음과 같이 이루어 진다.

(포인터 - 포인터) / sizeof(*포인터)

한마디로 (104 - 100 ) /sizeof(*포인터)로 연산이 이루어 지는 것이다.