포인터를 상수로 포인터로 변환: 제한 사항 및 고려 사항
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!