오늘은 C언어 포인터 심화과정 그 두번째 시간으로 포인터의 연산에 대해서 이야기 해 보려고 합니다. 포인터 기초를 알아보는 시간에 포인터도 변수의 한 종류라고 이야기 했던것 기억하시나요? (상수도 변수의 한 종류이지요. 변하지 않는 변수일 뿐.....) 그렇기에 변수처럼 포인터도 연산이 되지 않을까요? 맞습니다. 연산이 되기는 합니다. 다만 일반적인 연산과 조금 다를 뿐...
먼저 C언어의 포인터 연산은 아래와 같은 규칙을 가지고 있습니다.
1. 포인터는 정수와의 연산은 가능하지만, 실수와의 연산은 불가능합니다.
2. 포인터끼리 대입 혹은 비교 연산은 가능합니다.
3. 포인터끼리의 더하기, 곱하기, 나누기는 아무런 의미가 없을 뿐더러 필요하지도 않습니다.
4. 포인터끼리의 빼기는 가능하며, 그 결과값은 포인터사이의 상대적 거리를 의미합니다.
위 내용을 봤을 때 포인터의 연산은 크게 사용될 일이 없겠다 싶죠? 하지만 프로그램을 만들다보면 문득문득 사용 될 일이 있을 수도 있습니다. 그럼 기본적인것 몇가지만 빠르게 확인해 보도록 하겠습니다.
포인터로 선언된 변수에 1을 더하면 해당 포인터를 선언할 때 정의된 데이터 타입에 따라 더해지는 byte 수가 달라집니다. 예를 들어 위의 상황에서는 포인터pa는 int형 포인터기 때문에 1을 더했을 때 4byte가 늘어나는 것이죠. 실행하여 결과를 한번 볼까요?
예상대로 4byte가 늘어난 것을 확인 할 수 있습니다. 그럼 정수(int) 타입 말고 문자(char)타입 이나 실수(double)타입도 해보겠습니다.
int형은 4byte, char형은 1byte, double형은 8byte씩 증가한걸 확인할 수 있습니다. 아니 그런데 잠깐!!
001FFD28 => 001FFD30이면 28~ 29~ 30으로 2byte 늘어난거 아닌가요?? 라고 하시는 분들 계시죠? 주소값이 16진수라는걸 기억하셔야 합니다. 28, 29, 2a, 2b, 2c, 2d, 2e, 2f, 30 입니다. 딱 8byte네요. 그럼 뺄셈은 어떨까요? 뺄셈도 동일하다고 생각하시면 됩니다. 오늘은 간단하게 포인터의 연산에 대해서 알아보았습니다. 감사합니다.
제 블로그를 방문해 주셔서 감사합니다.
도움이 되셨다면 공감(좋아요) 부탁드리고,
댓글은 다른분들께도 좋은 정보일 수 있으니
공개로 부탁드립니다.
여러분의 작은 정성이 좋은 포스팅을 생산하는
힘이 된답니다. :)
감사합니다.
'PROGRAMMING > C' 카테고리의 다른 글
C언어 포인터 심화과정 (배열포인터, 포인터배열) (0) | 2022.11.03 |
---|---|
C언어 포인터 심화과정 (배열과 포인터, 포인터의 포인터) (0) | 2022.11.02 |
C언어 포인터 심화과정 (상수포인터) (0) | 2022.10.31 |
C언어 포인터 기초 (0) | 2022.10.26 |
C언어 배열 응용 (0) | 2022.10.25 |
댓글