교육을위한 자체 문자열 구현을 구현하고 싶습니다. 이를 위해 다음과 같이 string이라는 구조체를 정의했습니다.const 포인터를 double에 쓰기
struct string {
const char *const data;
const int length;
};
이 문자열 구조체를 만드는 함수를 사용하여 변수에 할당합니다.
*(int *) &result.length = // a int
지금 나는 또한 const char *const data
에 쓰고 싶은 : 나는 다음과 같은 트릭을 사용하는 const int length
를 대체하기 위해
. 내가 아는 한 처음 const
은 포인터가 가리키는 항목을 편집 할 수 없도록하고 두 번째 const
은 포인터를 다른 메모리 위치로 지정할 수 없다는 것을 확인합니다. 이것들은 변경 불가능한 문자열의 속성입니다. 그래서 제 질문은 : const int length
처럼 내가 어떻게 const char *const data
에 할당 할 수 있습니까?
편집 : result
위와 선언에서 struct string
및 는에게 초기화 구조체 string
기다림. 왜 모든 멤버를 'const'로 만들고 그 constness를 위반합니까? –
@ Daniel Kamil Kozar 문자열을 만들 때만 위반합니다. 생성 된 후에는 변경해서는 안됩니다 (따라서 consts) –
사용자가 구조 내부를 조사 할 수 없도록 사용자가 구조를 해석 할 수 없도록 사용자가 제공하는 액세스 기능을 사용하는 경우를 제외하고는 유형을 불투명하게 만들지 마십시오. 그 많은'const' 한정자를 추가하면 구조체를 수정할 수 없게됩니다. 따라서 여러분은 반드시 SO에 대해 질문해야합니다. 당신이하는 일은 좋지 않습니다. 캐스팅을 남용하여 효과를 낼 수 있다는 사실은 자신이하는 일이 좋지 않다는 표시입니다. –