본문 바로가기

공부/C++

포인터의 종류

앞서 사용한 int* 이라는 타입 이름은

int* 즉 int타입의 변수만 가리킬 수 있는 포인터 의 선언이다.

고로 int*로 설정했다면 int타입 이외의 변수를 포인터로 사용할 수 없다.

그렇다면 여기서 예시. 코드.

또한 unsigned int와 int 같은 사인이 다른 타입간도 선언이 불가능하다.

//////////////////////////////////////////
 

#include <iostream>
using namespace std;


int main()
{
int i = 300;
int* pi = &i;

char c = 'C';
char* pc = &c;

float f = 700.5f;
float* pf = &f;

bool b = true;
bool* pb = &b;

short int s = 456;
short int* ps = &s;


cout << "a  = " << i << "\n";   // i출력
cout << "pi = " << pi << "\n"; // i의 주소값 출력

cout << "c  = " << c << "\n"; // c값 출력
cout << "pc = " << pc << "\n"; // c의 주소값 출력

cout << "f  = " << f << "\n"; // f값 
cout << "pf = " << pf << "\n"; // f의 주소값 출력

cout << "s  = " << s << "\n"; // s값
cout << "ps = " << ps << "\n"; // s의 주소값 출력

system("pause");//비쥬얼 스튜디오 2008 부터는 디버깅시에 이 문구를 사용하지 않을 시에 바로 디버깅이 종료되어버림.

return 0;

}


////////////////////////

출력화면
 

 
문자 타입의 주소는 저렇게 에러가 난다.
/////////////////// 



그렇다면 왜 ? 포인터는 정해진 타입의 포인터로 만 정해야 하는걸까?

하는 질문이 있을 수 있다.

타입을 정하지 않고 포인터를 쓰게되면 

포인터는 해당 값의 주소 를 가리키기 때문에

해당 값의 주소 이후의 공간이 어디까지 쓰이는지[해당 변수가 무슨 타입인지에 따라 바뀜] 알 방법이 없다.

그래서 타입을 정해줘야 이러한 오류가 생기지 않기에  타입을 꼭 맞추어줘야 한다는 것이다.

[void는?]