포인터 변환: 포인터 간 변환에 제한이 있는 이유는 무엇입니까?
C에서는 일반적으로 포인터를 비 포인터로 캐스팅하는 것이 허용됩니다. -const 유형을 const 유형에 대한 포인터로 지정합니다. 이는 상수 데이터만 수정할 수 있도록 허용하는 "상수 정확성" 원칙을 따릅니다.
그러나 포인터에 대한 포인터를 처리할 때 특이한 예외가 발생합니다. 앞서 언급한 변환과 달리 "비상수에 대한 포인터에 대한 포인터"를 "const에 대한 포인터에 대한 포인터"로 변환하는 것은 금지되어 있습니다.
다음 코드 조각을 고려하세요.
char *s1 = 0; const char *s2 = s1; // OK... char *a[MAX]; // aka char ** const char **ps = a; // error!
왜 a를 ps에 할당하는 것이 불법인가요? 대답은 표준에 있습니다.
const char c = 'c'; char* pc; const char** pcc = &pc; // not allowed *pcc = &c; *pc = 'C'; // would allow to modify a const object
이 예에서
이 변환이 허용되면 상수 개체를 수정할 수 있습니다. 예를 들어 *pcc는 const 문자를 가리키지만 *pc는 수정 가능합니다. 이는 잠재적으로 상수 데이터에 대한 변경을 허용하므로 const 정확성의 전제를 위반합니다.
따라서 포인터를 non-const에 대한 포인터로, const에 대한 포인터에 대한 포인터로 변환하는 것에 대한 제한은 상수 개체의 무결성을 유지하고 의도하지 않은 데이터 수정을 방지합니다.
위 내용은 C에서 포인터-포인터를 Non-Const로, 포인터-포인터를 Const로 변환할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!