임베디드 C에서도 포인터의 주소값을 출력할 때는 %p가 정석입니다. 임베디드라고 해서 %d를 쓰는 것은 아닙니다.
int a = 10;
int *p = &a;
printf("%p\n", (void *)p); // 주소 출력
printf("%d\n", *p); // 포인터가 가리키는 값 출력
구분하면 아주 간단합니다.
출력하려는 것지정자예
| 포인터가 저장하고 있는 주소 | %p | printf("%p", (void *)p); |
| 포인터가 가리키는 정수 값 | %d | printf("%d", *p); |
| 일반 정수 변수의 값 | %d | printf("%d", a); |
예를 들어:
int a = 10;
int *p = &a;
여기서
- a → 10
- &a → a의 주소
- p → a의 주소
- *p → 10
따라서
printf("%d", a); // 10
printf("%p", (void *)p); // 주소
printf("%d", *p); // 10
다만 아주 작은 AVR 같은 임베디드 환경에서는 printf() 자체가 프로그램 용량을 많이 차지해서, 실제 펌웨어에서는 printf("%p")를 아예 사용하지 않고 UART로 주소를 직접 16진수 형태로 출력하는 경우도 있습니다.
즉 C 문법상 %p가 맞고, 임베디드에서는 printf를 쓰느냐가 별도의 문제입니다.
카페 게시글
도사의컴퓨터강의
임베디드에서도 포인터를 %d가 아닌 %p 로 쓴다...
김종록
추천 0
조회 19
26.08.19 18:02
댓글 0
다음검색