반응형
포인터 연산
#include <iostream>
using namespace std;
int main()
{
int value = 7;
int *ptr = &value;
cout << uintptr_t(ptr - 1) << endl;
cout << uintptr_t(ptr) << endl;
cout << uintptr_t(ptr + 1) << endl;
cout << uintptr_t(ptr + 2) << endl;
return 0;
}
6100644356
6100644360
6100644364
6100644368
지금까지 포인터 주소값을 16진수에서 10진수로 캐스팅하기 위해 (int)ptr같은 방식으로 캐스팅을 하였는데,uintptr_t(ptr)
을 사용하는게 좋다. 또한 포인터는 주소를 저장하는 변수인데 왜 앞에 자료형을 적어주느냐 하였을때 de-referencing 할 때 어떤 타입으로 가져오느냐가 지금까지 알던 내용이었고,
두번째 이유로 포인터 연산을 했을때 몇 바이트씩 이동할지 알아야 하기 때문이다. 위 코드에선 int자료형은 4바이트기 때문에 포인터 연산 한번마다 4씩 변화하고, 만약 double자료형으로 바꾼다면 8바이트씩 변할 것이다.
배열 인덱싱
#include <iostream>
using namespace std;
int main()
{
char name[] = "sugang sinchung";
int num_name = sizeof(name) / sizeof(char);
for (int i = 0; i < num_name; i++)
{
cout << *(name + i);
}
cout << endl;
return 0;
}
sugang sinchung
배열도 포인터이기 때문에 포인터 연산으로 출력이 가능하다.
#include <iostream>
using namespace std;
int main()
{
char name[] = "sugang sinchung";
char *ptr = name;
while (true)
{
cout << *ptr;
++ptr;
if (*ptr == '\0')
{
break;
}
}
cout << endl;
return 0;
}
이런식으로 증감연산자를 이용할 수도 있다.
반응형
'C++' 카테고리의 다른 글
6-6. 메모리 동적 할당 (Dynamic Memory Allocation) (0) | 2024.02.20 |
---|---|
6-5. 문자열 스타일의 심볼릭 상수 (기호적 상수) (1) | 2024.02.20 |
6-3. 포인터와 정적 배열 (1) | 2024.02.18 |
6-2. 포인터의 기본적인 사용법, 널 포인터 (0) | 2024.02.18 |
6-1. C언어 스타일 배열 문자열(strcpy, strcat, strcmp) (0) | 2024.02.17 |