728x90
728x90
SMALL
포인터 연산
- 포인터를 uniptr_t 로 형변환 하면 주소가 정수로 보기 좋게 나온다.
using namespace std;
int main()
{
int value = 7;
int * ptr = &value;
cout << uniptr_t(ptr - 1) << endl;
cout << uniptr_t(ptr) << endl;
cout << uniptr_t(ptr + 1) << endl;
cout << uniptr_t(ptr + 1) << endl;
}
- int형 포인터에 1을 더해주면 주소값이 1 증가하는 것이 아닌 4$($bye$)$가 증가한다.
- double형 포인터에 1을 더해주면 주소값이 1 증가하는 것이 아닌 8$($byte$)$이 증가한다.
ο double 데이터 타입의 크기는 64bit = 8byte니까 double끼리는 서로 주소가 8칸 차이나기 때문
■ 메모리 공간 1칸당 8bit
주소값들은 가르키는 데이터타입의 크기만큼 차이가 난다.
- int * ptr 일 때 ptr 과 $($ptr + n$)$ 의 값은 4n 씩 차이난다.
- dobule * ptr 일 때 ptr 과 $($ptr + n$)$ 의 값은 8n 씩 차이난다.
포인터로 배열 인덱싱
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
int array[] = { 9,7, 5, 3, 1 };
cout << array[0] << " " << (uintptr_t)&array[0] << endl;
cout << array[1] << " " << (uintptr_t)&array[1] << endl;
cout << array[2] << " " << (uintptr_t)&array[2] << endl;
cout << array[3] << " " << (uintptr_t)&array[3] << endl;
return 0;
}
- 배열의 주소를 담고 있는 포인터는 가르키고 있는 배열을 인덱싱할 수 있는데 [ ] 말고도 포인터 연산을 이용해 *$($ptr + i$)$ 이런식으로 접근할 수 있다.
ο array[i] = *$($ptr + i$)$
ο &array[i] = ptr + i
728x90
300x250
LIST
'C │ C++ │ C# > C++' 카테고리의 다른 글
C++ Chapter 6.10 : 메모리 동적 할당 new와 delete (0) | 2023.11.05 |
---|---|
C++ Chapter 6.9 : C언어 스타일의 문자열 기호적 상수 (1) | 2023.10.29 |
C++ Chapter 6.7 : 포인터와 정적 배열 (0) | 2023.09.28 |
C++ Chapter 6.6 : 포인터의 기본적인 사용법 (0) | 2023.09.04 |
C++ Chapter 6.5 : C언어 스타일의 배열 문자열 (0) | 2023.09.03 |