본문 바로가기

C 언어/임베디드 C

주소 값의 연산


//주소연산을 보여주는 프로그램의 예
#include <stdio.h>

int main()
{
 short sNum = 5, *sp = &sNum;
 float fNum = 2.3f, *fp = &fNum;
 printf("sp의 값 : %p\n", sp);
 printf("증가된 sp의 값 : %p\n", ++sp);
 printf("fp의 값 : %p\n", fp);
 printf("증가된 fp의 값 : %p\n", ++fp);
 return 0;
}
 
결과
sp의 값 : 0012FF7C
증가된 sp의 값 : 0012FF7E
fp의 값 : 0012FF74
증가된 fp의 값 : 0012FF78

리눅스에서 결과
sp의 값 : 0xbffff84a
증가된 sp의 값 : 0xbffff84c
fp의 값 : 0xbffff840
증가된 fp의 값 : 0xbffff844

실행 결과에서 short형 포인터 변수 sp의 증가는 2며, float형 포인터 변수의 fp의 증가는 4가 된다는 것을 알수 있다.

예) 각 포인트 변수값의 연산
char*   c  100이 저장  ---> c+1=101,    c+5=100+5*1=105
short*  s  100이 저장  ---> s+1=102,    s+6=100+6*2=112
int*      i   100이 저장  ---> i+1=104,     i+7=100+7*3=128

cpu와 memory 처리법
예)10번지[100]
1. 주소 보냄(cpu)
2. 주소 받음(memory)
3. 10번지 선택(memory)
4. 100을 전송(cpu)
5. 100을 수신(memory)
6. 10번지에 100을 저장(memory)

'C 언어 > 임베디드 C' 카테고리의 다른 글

함수의 호출과 실행  (0) 2011.04.19
함수  (0) 2011.04.19
포인터(3)  (0) 2011.04.18
포인터(2)[IEEE754방식으로 확인]  (0) 2011.04.15
포인터(1)  (0) 2011.04.15