포인터의 대입 규칙
규칙 1. 포인터는 가리키는 변수의 형태가 같을 때만 대입해야 한다
#include <stdio.h>
int main(void)
{
int a = 10;
int* p = &a;
double* pd;
pd = p;
printf("%lf\n", *pd);
return 0;
}
==> 위에 그림처럼 *pd가 사용하는 영역이 변수 a의 영역보다 크기 때문에 알 수 없는 값이 나오는 것이다 (포인터 pd의 반환형이 int형 이라면 컴파일했을 때 10이 나왔을 것이다)
규칙 2. 형 변환을 사용한 포인터의 대입은 언제나 가능하다
double a = 3.4;
double *pd = &a;
int *pi;
pi = (int*)pd; // double형 포인터 pd를 int형으로 바꿔줬다
==> 위의 그림처럼 *pi가 사용하는 영역이 변수 a와 *pd의 영역보다 작기 때문에 변수 a의 일부를 int형 변수처럼 사용할 수 있다
포인터를 사용하는 이유
임베디드 프로그래밍을 할 때 메모리에 직접 접근하는 경우나 동적 할당한 메모리를 사용하는 경우에는 반드시 포인터가 필요하다 (게임 같은 경우엥도 메모리에 직접 접근하므로 C언어 계열을 사용하는 것 같다)
임베디드 프로그래밍이란?
- 임베디드 시스템을 제어하기 위한 프로그램
- 하드웨어 (자동차, 냉장고, 전기밥솥 등)를 제어하는 소프트웨어를 만드는 일
#include <stdio.h>
void swap(int* pa, int* pb);
int main(void)
{
int a = 10, b = 20;
swap(&a, &b);
printf("a:%d, b:%d", a, b);
return 0;
}
void swap(int* pa, int* pb)
{
int temp;
temp = *pa;
*pa = *pb;
*pb = temp;
}
Q1. 포인터 없이 두 변수의 값을 바꾸는 함수는 불가능한가?
A1. 불가능하다
Q2. swap 함수에서 바꾼 값을 main 함수로 반환하는 방법은?
A2. main 함수에서 받은 변수를 swap함수에서 바꾼다고 해도 결국 복사본을 바꾼 것이므로 반환해도 같은 값이 나온다
*즉 변수를 서로 바꿀려면 포인터를 사용해야 한다
'C 언어 > [책 정리] 혼자 공부하는 C언어' 카테고리의 다른 글
전처리 지사자 (2) (0) | 2023.01.11 |
---|---|
전처리 지시자 (1) (0) | 2023.01.10 |
포인터 완전 정복을 위한 포인터 이해하기 (1) (0) | 2022.12.21 |
포인터의 기본 개념 (2) (0) | 2022.12.20 |
포인터의 기본 개념 (1) (0) | 2022.12.20 |