1.
c의 포인터
-
-참조 연산자 (&)
-
메모리의 변수 주소
-
-Pinter
-
포인터는 C 프로그램에서 메모리에 접근 하고 주소를 조작 하는 데 사용 된다.
-
포인터 변수 또는 단순히 포인터는 데이터가 아닌 메모리 주소를 보유 하는 변수의 특별 한 자료형이다
주소
값을 보유 하는 변수를 포인터 변수 또는 단순히 포인터
라고 한다.
32bit
주소 맵의 운영체제 (2^32
= 4G Memory)
int
main(void){
int
a;
int
*b;
return
0;
}
a
변수 메모리 주소 확인 과정
&a에
라는 메모리 상의 주소 값이 리턴 값으로 온다.
메모리 번지
|
메모리 자료형 int(32bit)
|
변수 이름
|
설명
|
0x1000
|
메모리 공간 할당
|
a;
|
변수 선언
|
0X1260
|
메모리 공간 할당 *
|
b=110;
|
주소 값 0x1500
선언
|
실재 값 존재
110;
|
메모리 공간 할당
|
메모리 자료형 int(32bit)
|
0x1500
|
int
main(void){
int
*c;
char
*d;
}
메모리 번지
|
메모리 자료형 int(32bit)
|
변수 이름
|
설명
|
0x2000
|
메모리 공간 할당 *
|
c;
|
주소 값 0x2000
선언
|
0X3000
|
메모리 공간 할당 *
|
d;
|
주소 값 0x3000
선언
|
실재 값 존재
int
|
메모리 공간 할당
|
메모리 자료형 int(32bit)
|
0x2000
위치
|
실재 값 존재
char
|
메모리 공간 할당
|
메모리 자료형 int(32bit)
|
0x3000
위치
|
#include
<stdio.h>
int
main(void){
int
value=10;
printf("Valueable:
%d, Memory Address: %d\n", value, &value);
}
메모리 번지
|
메모리 자료형 int(32bit)
|
변수 이름
|
설명
|
0x4000
|
메모리 공간 할당
|
value;
|
변수 선언
|
%p
&value
|
|
%d
value
|
|
#include
<stdio.h>
int
main(void){
int*
point_value;
int
num=100;
메모리 번지
|
메모리 자료형 int(32bit)
|
변수 이름
|
설명
|
0x5000
|
메모리 공간 할당 *
|
point_value;
|
변수 선언
|
0x5200
|
메모리 공간 할당 100
|
num
|
변수 선언
|
printf("[point_value]
memory_address: %ld, Content: %d\n", point_value,
*point_value);
메모리 번지
|
메모리 자료형 int(32bit)
|
변수 이름
|
설명
|
0x5000
|
메모리 공간 할당
|
value;
|
변수 호출
|
%d
*point_value
|
|
%d
point_value
|
결과
|
printf("[num]
memory_address: %p, Value: %d\n\n", &num, num);
메모리 번지
|
메모리 자료형 int(32bit)
|
변수 이름
|
설명
|
0x5200
|
메모리 공간 할당
|
value;
|
변수 호출
|
%p
&num
|
|
%d
num
|
결과
|
point_value=#
메모리 번지
|
메모리 자료형 int(32bit)
|
변수 이름
|
설명
|
0x5200<-&num
0x5200=100;
|
메모리 공간 할당 *
|
point_value;
0x5000
|
변수 선언
|
printf("[point_value]
memory_address: %ld, Content: %d\n\n", point_value,
*point_value);
메모리 번지
|
메모리 자료형 int(32bit)
|
변수 이름
|
설명
|
0x5200
|
메모리 공간 할당 *
|
point_value
|
변수 호출
|
%ld
*point_value 20
|
|
&num
= 0x5200
|
결과
|
num=90;
메모리 번지
|
메모리 자료형 int(32bit)
|
변수 이름
|
설명
|
0x5200
|
메모리 공간 할당 90
|
num
|
변수 선언
|
printf("[point_value]
memory_address: %ld, Content: %d\n\n", point_value,
*point_value);
메모리 번지
|
메모리 자료형 int(32bit)
|
변수 이름
|
설명
|
0x5200
|
메모리 공간 할당
|
point_value
|
변수 호출
|
%ld
*point_value 11
|
|
num
= 0x5200
|
결과
|
*point_value=30;
메모리 번지
|
메모리 자료형 int(32bit)
|
변수 이름
|
설명
|
0x5200=30
|
메모리 공간 할당 *
|
point_value=30
|
변수 선언
|
printf("[num]
memory_address: %ld, Value: %d\n", &num, num);
return
0;
메모리 번지
|
메모리 자료형 int(32bit)
|
변수 이름
|
설명
|
0x5200
|
메모리 공간 할당
|
point_value
|
변수 호출
|
%ld
&num
|
|
num
= 30
|
결과
|
}