저번 시간에 주소를 저장하기 위해 포인터 변수를 사용한다고 했다. 그렇다면 포인터 변수의 역참조는 무엇일까?
포인터 변수 역참조
저장된 메모리 주소로 접근하여 거기 있는 값을 참조하는 것.
●사용법
포인터 변수 앞에 *을 넣어 사용 (값을 가져오거나 값을 저장하는 역할을 함)
●역참조로 값을 가져오는 코드 예제
#include <stdio.h>
int main() {
int a, * address;
a = 15;
address = &a; //&a = a의 주소번호
printf("a의 값: %d\n", a);
printf("a의 주소번호 address: %d\n", address);
printf("포인터 변수 address의 a값 역참조: %d\n", *address);
return 0;
}
●역참조로 값을 저장하는 코드 예제
#include <stdio.h>
int main()
{
int *numpoint; // 포인터 변수 선언
int num1 = 10; // 정수형 변수를 선언하고 10 저장
numpoint = &num1; // num1의 메모리 주소를 포인터 변수에 저장
printf("역참조 저장 전 메모리 주소의 값: %d\n", *numpoint); //역참조로 저장전 메모리 주소에 접근하여 도출 되는 값
*numpoint = 20; // 역참조 연산자로 메모리 주소에 접근하여 20을 저장
printf("역참조 저장 후 메모리 주소의 값: %d\n", *numpoint); // 20: 역참조 연산자로 메모리 주소에 접근하여 값을 가져옴
printf("원래 있던 num1의 값의 변화: %d\n", num1); // 20: 실제 num1의 값도 바뀜
return 0;
}
참고사항
변수 선언 때도 *, 역참조 할 때도 *을 사용한다.
포인터를 선언할 때 *는 "이 변수가 포인터다"라고 알려주는 역할이고, 포인터에 사용할 때 *는 "포인터의 메모리 주소를 역참조 하겠다"라는 뜻 두 가지로 사용되는 것이므로 구분해서 이해하면 된다.
'프로그래밍 언어 > C' 카테고리의 다른 글
C언어 19강 ) 다양한 자료형의 포인터 (0) | 2020.11.06 |
---|---|
C언어 18강)++ 포인터와 문자열/ 문자열 포인터에서 인덱스로 접근하기 (0) | 2020.11.06 |
C언어 18강 쉽게 이해하는 주소와 포인터 설명 (0) | 2020.11.05 |
C언어 17강 다차원 배열 (0) | 2020.11.05 |
C언어 16강 순환 함수(재귀함수) (0) | 2020.11.03 |