언어는 과-학인가요?/c언어
(c언어) 포인터(pointer)뜻
이원자 탄소
2020. 9. 12. 12:00
728x90
L value (Left value) - 이름이 있고 지속되는 값
R value (Right value) - 해당 줄에서만 존재하는 임시값
초기화(initialize)와 대입(assignment)
int a =100; (왼쪽이니까 L value)
int b = a + 200; (오른쪽 R value)
b=100;
포인터 pointer
메모리의 주소값을 저장하기 위한 목적으로 선언되는 변수
char ch1 = 'F', ch2 = 'K';
int num = 20;
주소값 대신에 이름을 넣어주는것
& : 주소연산자 //변수의 위치 알려줌
#include <stdio.h>
int main() {
char ch1 = 'F', ch2 = 'G';
int num = 20;
printf("%d %c\n", ch1, ch1);
printf("%d %c\n", ch2, ch2);
printf("%d\n", num);
printf("----------------------\n");
printf("ch1 변수가 저장되어 있는 주소: [%d], [%x], [%p], [Ox%x]\n", &ch1, &ch1, &ch1, &ch1);
printf("ch2 변수가 저장되어 있는 주소: [%d], [%x], [%p], [Ox%x]\n", &ch2, &ch2, &ch2, &ch2);
printf("num 변수가 저장되어 있는 주소: [%d], [%x], [%p], [Ox%x]\n", &num, &num, &num, &num);
}
10진수 형태의 메모리 주소 : %d
16진수 형태의 메모리 주소 : %x
16진수 형태의 메모리 주소 (앞쪽에 0x 붙여서 표시 : 0x%d
포인터 주소 형태의 메모리 주소 (16진수 형태) : %p
* : *연산자 //포인터가 가르키는 메모리 공간에 접근할 때 사용하는 연산자
#include <stdio.h>
int main() {
//기본자료형의 변수 선언과 초기화
int num = 20;
//포인터 변수 선언
int* pnum;
//포인터 변수에 주소값 대입시키기
pnum = #
printf("num 변수에 저장되어 있는 값 = [%d]\n", num);
printf("num 변수의 주소값 = [%x]\n", &num);
printf("pnum 변수에 저장되어 있는 값 = [%x]\n", pnum);
printf("pnum 변수에 저장되어 있는 주소에 담겨있는 값 = [%d]\n", *pnum);
printf("pnum 포인터 변수의 주소 = [%x]\n", &pnum);
}
보이다시피 pnum변수에 num변수의 주소값이 들어간 것을 볼 수 있다.
그리고 *pnum을 사용하여 그 주소값에 어떤 값(num값) 이 저장되어 있는지 찾아가서 불러올수 있다
포인트 변수의 주소는 불러온 주소값과 다르다는걸 보여준다.
#include <stdio.h>
int main() {
int num = 20;
int* pnum;
pnum = #
*pnum = 30;
printf("num 변수에 저장되어 있는 값 = [%d]\n", num);
printf("pnum 변수에 저장되어 있는 값 = [%d]\n", *pnum);
printf("num 변수에 저장되어 있는 주소값 = [%p]\n", &num);
printf("pnum 포인터 변수에 저장되어 있는 주소값 = [%p]\n", pnum);
}
다음은 num 이 포인트 변수 주소에 접근해 값으로 바꾸고 둘을 비교하는 코드이다
num에 저장되어있던 값 20이 30으로 바뀐 것을 볼 수 있다.
pnum의 주소값이 num의 주소값과 같아졌다는걸 볼 수 있다.
728x90