C
[C언어] 포인터
데분몽굴
2024. 8. 1. 16:26
주소 연산자 : &
주소라 하면 변수가 할당된 메모리 공간의 시작 주소를 의미합니다. 주소 연산자 &를 사용해서 시작주소를 구합니다.
#include <stdio.h>
int main(void)
{
int a;
double b;
char c;
printf("int형 변수의 주소: %u\n", &a);
printf("double형 변수의 주소: %u\n", &b);
printf("char형 변수의 주소: %u\n", &c);
return 0;
}
int형 변수는 980번지부터 983번지까지 4바이트에 할당되었을 겁니다.
double형 변수는 016번지부터 023번지까지 8바이트가 할당되었으며 char형변수는 044번지 한 바이트에 할당되었을 것입니다.
포인터와 간접 참조 연산자: *
#include <stdio.h>
int main(void)
{
int a;
int* pa;
pa = &a; //포인터에 a의 주소 대입
*pa = 10;
printf("포인터로 a 값 출력 : %d\n", *pa);
printf("변수명으로 a값 출력: %d\n", a);
return 0;
}
int *pa 는 포인터를 선언하는 부분입니다. 포인터의 자료형은 변수의 자료형을 적습니다.
예를 들어 int 형 변수의 주소를 저장하면 int를 사용하고 double형 변수의 주소를 저장하면 double을 사용합니다.
여러 가지 포인터 사용해보기
#include <stdio.h>
int main(void)
{
int a = 10, b = 15, total;
double avg;
int* pa, * pb;
int* pt = &total;
double* pg = &avg;
pa = &a;
pb = &b;
*pt = *pa + *pb;
*pg = *pt / 2.0;
printf("두 정수의 값: %d, %d\n", *pa, *pb);
printf("두 정수의 합: %d\n", *pt);
printf("두 정수의 평균: %.1lf\n", *pg);
return 0;
}
const를 사용한 포인터
const 예약어를 포인터 사용하면 가리키는 변수의 값을 바꿀 수 없다는 의미로, 변수에 사용하는 것과는 다른 의미를 가집니다.
#include <stdio.h>
int main(void)
{
int a = 10, b = 20;
const int* pa = &a;
printf("변수 a 값: %d\n", *pa);
pa = &b;
printf("변수 b값: %d\n", *pa);
pa = &a;
a = 20;
printf("변수 a값: %d\n", *pa);
return 0;
}
pa는 const의 사용과는 무관하게 변수의 b의 주소를 저장하고 그 값을 간접 참조하여 출력하고 있습니다
포인터 사용되는 const는 pa가 가리키는 변수 a는 pa를 간접 참조하여 바꿀 수 없다는 것입니다. 만약 *pa=20;과 같이 a값을 바꾸고자 한다면
에러메시지를 출력하게 됩니다.