포인터 형식과의 변환Conversions to and from Pointer Types

값의 한 형식에 대한 포인터는 다른 형식에 대한 포인터로 변환될 수 있습니다.A pointer to one type of value can be converted to a pointer to a different type. 그러나 저장소의 정렬 요구 사항 및 여러 형식의 크기 때문에 결과가 정의되지 않을 수 있습니다.However, the result may be undefined because of the alignment requirements and sizes of different types in storage. 개체에 대한 포인터는 형식이 덜 엄격하거나 동일하게 엄격한 저장소 정렬을 요구하는 개체에 대한 포인터로 변환된 다음 다시 변경 없이 되돌릴 수 있습니다.A pointer to an object can be converted to a pointer to an object whose type requires less or equally strict storage alignment, and back again without change.

정보의 제한 또는 손실 없이 void에 대한 포인터를 포인터에서 임의의 형식으로 또는 임의의 형식에서 포인터로 변환할 수 있습니다.A pointer to void can be converted to or from a pointer to any type, without restriction or loss of information. 결과가 원래 형식으로 다시 변환되는 경우 원래 포인터가 복구됩니다.If the result is converted back to the original type, the original pointer is recovered.

포인터가 같은 형식의 다른 포인터로 변환되었지만 추가 또는 다른 한정자를 포함하고 있는 경우 새 포인터는 새 한정자의 제한을 제외하고 기존 포인터와 동일합니다.If a pointer is converted to another pointer with the same type but having different or additional qualifiers, the new pointer is the same as the old except for restrictions imposed by the new qualifier.

포인터 값은 정수 계열 값으로도 변환될 수 있습니다.A pointer value can also be converted to an integral value. 변환 경로는 다음 규칙에 따라 포인터의 크기와 정수 계열 형식의 크기에 따라 다릅니다.The conversion path depends on the size of the pointer and the size of the integral type, according to the following rules:

  • 포인터 크기가 정수 계열 형식의 크기보다 크거나 같은 경우 포인터는 부동 소수점 값으로 변환될 수 없다는 점을 제외하고 변환 시 부호 없는 값처럼 동작합니다.If the size of the pointer is greater than or equal to the size of the integral type, the pointer behaves like an unsigned value in the conversion, except that it cannot be converted to a floating value.

  • 포인터가 정수 계열 형식보다 작은 경우 포인터는 먼저 정수 계열 형식과 같은 크기의 포인터로 변환된 다음 정수 계열 형식으로 변환됩니다.If the pointer is smaller than the integral type, the pointer is first converted to a pointer with the same size as the integral type, then converted to the integral type.

    반대로 정수 계열 형식은 다음 규칙에 따라 포인터 형식으로 변환될 수 있습니다.Conversely, an integral type can be converted to a pointer type according to the following rules:

  • 정수 계열 형식이 포인터 형식과 같은 크기인 경우 변환을 수행하면 정수 계열 값이 포인터(부호 없는 정수)로 처리됩니다.If the integral type is the same size as the pointer type, the conversion simply causes the integral value to be treated as a pointer (an unsigned integer).

  • 정수 계열 형식의 크기가 포인터 형식의 크기와 다른 경우 정수 계열 형식은 먼저 부호 있는 정수 계열 형식에서 변환부호 없는 정수 계열 형식에서 변환 테이블에 지정된 변환 경로를 사용하여 포인터 크기로 변환됩니다.If the size of the integral type is different from the size of the pointer type, the integral type is first converted to the size of the pointer, using the conversion paths given in the tables Conversion from Signed Integral Types and Conversion from Unsigned Integral Types. 그런 다음 포인터 값으로 처리됩니다.It is then treated as a pointer value.

    값이 0인 정수 상수 식 또는 void \* 형식으로 캐스팅된 이러한 식은 형식 캐스팅, 할당 또는 모든 형식의 포인터에 대한 비교를 통해 변환할 수 있습니다.An integral constant expression with value 0 or such an expression cast to type void \* can be converted by a type cast, by assignment, or by comparison to a pointer of any type. 이 경우 동일한 형식의 다른 null 포인터와 똑같은 null 포인터가 생성되지만 이 null 포인터는 함수 또는 개체에 대한 어떤 포인터와도 같지 않습니다.This produces a null pointer that is equal to another null pointer of the same type, but this null pointer is not equal to any pointer to a function or to an object. 상수 0 이외의 정수는 포인터 형식으로 변환될 수 있지만 결과는 이식할 수 없습니다.Integers other than the constant 0 can be converted to pointer type, but the result is not portable.

참고 항목See Also

할당 변환Assignment Conversions