특정 소프트웨어들은 하드웨어와 연동하기 위해
구체적인 메모리 저장위치에 접근할 필요가 있다.
그렇기에 프로그래머들은
하위단계의 세부사항까지 접근할 수 있는 코드를 작성할 수 있어야한다.
&operator
주소값을 반환한다.
& x : x 의 주소값을 의미
Pointer variables
int *p : 정수형이 저장된 곳에 주소값을 저장하는 변수
예시 1)
변수 |
address |
memory |
x-> |
0x00(16진수) |
10 |
px-> |
0x01 |
0x00 |
|
0x02 |
|
|
|
|
px->0x00 : 변수 px에 입력된 메모리값
&px->0x01 : 변수 px가 저장된 주소값
*px->*(0X00)->10 : 변수 px의 주소값을 파악, 이에 저장된 메모리값을 호출
예시 2)
변수 |
address |
memory |
x -> |
oxoo |
4 |
p -> |
oxo1 |
oxoo |
|
|
|
cout<<*p
// 이는 p의 주소값으로 jump를 의미한다 따라서 *(oxoo)-> 4
4
// int& a=x / int& b=y
//&x : x의 주소값을 반환
//int* px : 포인터변수 선언(주소값을 저장하는 변수)
//*px : px에 저장된 주소값으로 jump in
int main() {
int x = 10;
int* px = &x;
cout << x << '\t' << &x << endl;
cout << *px <<'\t' << px << '\t' << &px << endl;
return 0;
}
10 008FFE70
10 008FFE70 008FFE64
예시 3)
Pass by address
int * a= &x
int * b = &y
*b -> *(0x01)->2000
|
add |
mem |
x |
0x00 |
10 = *a -> 2000 |
y |
0x01 |
2000 = *b -> 10 |
a |
0x02 |
0x00 -> gone |
b |
0x03 |
0x01 -> gone |
temp |
0x04 |
2000 -> gone |
|
|
|
#include <iostream>
using namespace std;
//swap(int a,int b) : pass by value (단순히 값을 복사)
//swap(int &a, int &b) : pass by reference (x, a는 같은 메모리 공간을 사용)
//swap(int* a, int* b) : pass by address
void swap(int* a, int* b) {
int temp = *b;
*b = *a;
*a = temp;
}
int main() {
int x = 10, y = 2000;
cout << x << '\t' << y << endl;
swap(&x, &y);
cout << x << '\t' << y << endl;
return 0;
}
10 2000
2000 10
Function Pointer
예시 4)
|
address |
memory |
a |
0x00 |
10 |
pa |
0x01 |
0x00 |
ppa |
0x02 |
0x01 |
|
0x03 |
|
int* ppa=&pa;
cout &ppa -<0x02
ppa -> 0x01
*ppa ->*0x01 -> 0x00
**ppa->**0x01 -> *0x00 -> 10
int main() {
int a = 10;
int* pa = &a;
int** ppa = &pa;
return 0;
예시 5)
|
add |
mem |
sum |
0x00 |
a를 reg1저장 |
|
0x01 |
b를 reg2저장 |
|
0x02 |
reg1+reg2 ->reg3 |
|
0x03 |
reg3->reta->main |
int sum(int a, int b) {
return a + b;
}
int mult(int a, int b) {
return a * b;
}
int evaluate(int (*func)(int, int), int a, int b) {
return func(a, b);
}
int main() {
int(*func)(int, int); // 입력2, 출력1인 함수의 주소값을 저장할 수 있는 포인터
func = ∑
cout << func(10, 20) << endl;
func = &mult;
cout << func(10, 20) << endl;
cout << evaluate(&sum, 10, 20) << endl;
cout << evaluate(&mult, 10, 20) << endl;
return 0;
}
30
200
30
200
해당 자료는 경희대학교 소프트웨어융합학과 배성호교수님 수업내용을 참조하였습니다.
'Code > C++' 카테고리의 다른 글
[C++] (example) & operator / pointer / pass by address/ function pointer (0) | 2019.10.17 |
---|---|
[C++] Vector / (0) | 2019.10.09 |
[C++] Local & Global Variables/ Pass by reference & value/ Recursion (0) | 2019.09.29 |
[C++] Function/ cmath library/ Default argument (0) | 2019.09.28 |
[C++] Input Stream/ Arithmetic Operators (0) | 2019.09.28 |