>백엔드 개발 >C++ >C에서 포인터-포인터-비상수를 포인터-포인터-상수로 변환할 수 없는 이유는 무엇입니까?

C에서 포인터-포인터-비상수를 포인터-포인터-상수로 변환할 수 없는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-01 06:02:10260검색

Why Can't We Convert a Pointer-to-Pointer-to-Non-const to a Pointer-to-Pointer-to-const in C  ?

포인터를 상수로 포인터로 변환: 제한 사항 및 고려 사항

C에서는 포인터를 비-포인터로 캐스팅하는 것이 허용됩니다. const를 포인터-const로 변환하는 경우 반대 작업이 불법인 것 같습니다. 이는 다음 질문을 제기합니다. 포인터에서 포인터에서 비상수로를 포인터에서 포인터에서 상수로 변환하는 것이 왜 불가능합니까?

답은 포인터의 의미에 있습니다. 유형. const에 대한 포인터는 수정할 수 없는 상수 변수를 나타냅니다. 포인터-포인터-비상수 포인터의 값을 변경하면 비상수 객체를 가리키는 가장 안쪽 포인터의 값이 효과적으로 변경됩니다. 이렇게 하면 불변성을 위반하여 const 객체를 간접적으로 수정할 수 있습니다.

예를 들어 다음 코드 조각은 문제를 보여줍니다.

char *s1 = 0;
const char *s2 = s1; // OK...
char *a[MAX]; // aka char **
const char **ps = a; // error!

포인터를 할당하려고 할 때 -pointer-to-a를 포인터-포인터-const로, 포인터 산술 및 역참조 작업을 통해 컴파일러는 오류를 발생시킵니다. 상수 객체를 수정합니다. 위의 예에서 *pc = 'C'; const 개체인 s1이 가리키는 문자열의 값을 수정합니다.

이러한 바람직하지 않은 동작을 방지하기 위해 C 표준에서는 포인터에서 포인터로, 비포인터로 변환하는 것을 허용하지 않습니다. const를 포인터-포인터-const로 변환합니다. 이렇게 하면 const 객체의 불변성이 유지되고 의도하지 않은 수정이 방지됩니다.

위 내용은 C에서 포인터-포인터-비상수를 포인터-포인터-상수로 변환할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.