(C++)4-4장 형변환
3.1 배열의 포인터 변환
배열을 포인터로 변환해 주소 이동만 가지고 효율적으로 배열의 값들으 읽거나 수정 할 수 있다.
예제)
#include<iostream>
using namespace std;
int main()
{
int i; int arr[10];
for(i=0;i<10;i++)
{
arr[i]=i*2;
}
int *ptr=arr;
cout<<arr[i]<<endl;
cout<<*(ptr+1)<<endl;
}
3.2 명시적 형변환
--- cast문법을 사용해 명시적으로 자료형을 변환할 수 있다.
cast-name<type>(expression)
. type: 변환될 형
. expression: 변환될 값
. cast-name: static_cast, const_cast, dynamic_cast, reinterpret_cast
3-2-1
static_cast형 변환
--흔히 산술 연산으로 인해 자동으로 형변환 되는 경우를 방지하기 위해 명시적으로 자료를 강제하는 경우와 void포인터와 함께 쓰여 특정자료형으로 변환이 필요할 때 많이 쓰인다.
int main()
{
float i=100.12345; double j=200.12345;
float count=static_cast<float>(j/i);
}
int main()
{
double d=1212;
void* p=&d;
double* dp=static_cast<double*><p>;
//void 포인터 변수 p에대해 컴파일러가 자료형을 모르기 때문에 static_cast를 이용해
명시적으로 double형을 변환해주엇다.
}
3-2-2
const_cast형 변환
int main()
{
const char* cp;
char* q=const_cast<char*>(cp); //한정자를 일반문자열 변수q로 변경했다
const_cast<string>(cp);//컴파일 오류 char*형을 string형으로 한정 속성 뿐만 아니라 자료형자체를 변환하려고 했으므로 오류가난다.
}
배열을 포인터로 변환해 주소 이동만 가지고 효율적으로 배열의 값들으 읽거나 수정 할 수 있다.
예제)
#include<iostream>
using namespace std;
int main()
{
int i; int arr[10];
for(i=0;i<10;i++)
{
arr[i]=i*2;
}
int *ptr=arr;
cout<<arr[i]<<endl;
cout<<*(ptr+1)<<endl;
}
3.2 명시적 형변환
--- cast문법을 사용해 명시적으로 자료형을 변환할 수 있다.
cast-name<type>(expression)
. type: 변환될 형
. expression: 변환될 값
. cast-name: static_cast, const_cast, dynamic_cast, reinterpret_cast
3-2-1
static_cast형 변환
--흔히 산술 연산으로 인해 자동으로 형변환 되는 경우를 방지하기 위해 명시적으로 자료를 강제하는 경우와 void포인터와 함께 쓰여 특정자료형으로 변환이 필요할 때 많이 쓰인다.
int main()
{
float i=100.12345; double j=200.12345;
float count=static_cast<float>(j/i);
}
int main()
{
double d=1212;
void* p=&d;
double* dp=static_cast<double*><p>;
//void 포인터 변수 p에대해 컴파일러가 자료형을 모르기 때문에 static_cast를 이용해
명시적으로 double형을 변환해주엇다.
}
3-2-2
const_cast형 변환
int main()
{
const char* cp;
char* q=const_cast<char*>(cp); //한정자를 일반문자열 변수q로 변경했다
const_cast<string>(cp);//컴파일 오류 char*형을 string형으로 한정 속성 뿐만 아니라 자료형자체를 변환하려고 했으므로 오류가난다.
}
댓글
댓글 쓰기