C/C++ 포인터 타입, 포인터 연산, 보이드 포인터
포인터 타입이 있는 이유
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int a = 1025;
int* p = &a;
printf("int size = %d\n", sizeof(int));
printf("주소 = %d, 값 = %d\n", p ,*p);
char* cp;
cp = (char*)p; //캐스팅을 해줘야 함
printf("char size = %d\n", sizeof(char));
printf("주소 = %d, 값 = %d\n", cp, *cp); //실행시 주소는 같으나 값이 1로 나옴
//1025 = 00000000 00000000 00000100 00000001
return 0;
}
char타입이 1바이트만 읽어 00000001만 읽었기에 값이 1이 나온다.
포인터 연살
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int a = 1025;
int* p = &a;
printf("int size = %d\n", sizeof(int));
printf("주소 = %d, 값 = %d\n", p ,*p);
char* cp;
cp = (char*)p; //캐스팅을 해줘야 함
printf("char size = %d\n", sizeof(char));
printf("주소 = %d, 값 = %d\n", cp + 1, *(cp + 1)); //주소 + 1 값은 4가 나옴
//1025=00000000 00000000 00000100 00000001
return 0;
}
char형 포인터이기에 +1을 하면 1바이트 만큼 이동하여 값을 읽기에 00000100 즉 4가 나온다.
*(pointer + n)
이렇게 사용해야 한다.
보이드 포인터
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int a = 1025;
int* p = &a;
printf("int size = %d\n", sizeof(int));
printf("주소 = %d, 값 = %d\n", p ,*p);
void* vp;
vp = p; //캐스팅이 필요 없음
printf("주소 %d, 값 %d", vp, *vp); //에러가 뜸, 주소만 가능, 포인터 연산 또한 불가능
return 0;
}
Leave a comment