문제

암호:

const char* const* const* foo(int bar);

이전에 포인터 수정을 방지하는 이중 const를 본 적이 있습니다.내 인생에서 처음으로 세 개의 const를 보았습니다.그 용도가 무엇인지 궁금합니다.

도움이 되었습니까?

해결책

귀하의 예에서는 최상위 수준의 간접 참조를 제외한 모든 것 const 자격 있는.

const char            /* const qualified base level */
    *const            /* const qualified level 1 */
    *const            /* const qualified level 2 */
    *                 /* regular level 3 */
    foo(int bar);

fooint 인수를 입력하고 일반 포인터를 반환합니다.
반환되는 포인터는 다음을 가리킵니다. const 자격을 갖춘 포인터
이는 차례로 다른 것을 가리킨다. const 자격을 갖춘 포인터
이는 다음을 가리킨다 const 자격 있는 char

다른 팁

다중 레벨 포인터가있는 경우 여러 가지 포인터 변수가 있습니다.예 :

char*** foo;
.

은 다음과 같이 액세스 할 수 있습니다.

| foo | pointer1 | pointer2 | string |
   |    ^     |    ^     |    ^
    \___/      \___/      \___/
.

선언

와 같이 네 개의 위치를 메모리에서 const로 한대로 자격을 부여 할 수 있습니다.
const char *const *const *const foo;
.

그러나 3 개의 별 프로그래머가되는 것이 가장 좋습니다.

하- 주위의 혼란 const.

기본적으로 포인터에 한정되면 바로 왼쪽에 있는 포인터에 적용됩니다.예를 들어:

char *const c;

만든다 c 읽기 전용 포인터 char, 반면

const char *c;

만든다 c 읽기 전용에 대한 포인터 char, 위치를 변경할 수는 있지만 c 를 가리키다.

물론 포인터와 포인터가 가리키는 항목 모두 읽기 전용으로 만들 수 있습니다.

const char *const c;

이것은 만든다 c 읽기 전용에 대한 읽기 전용 포인터 char.이전 선언을 사용하면 다음을 수정할 수 있습니다. *c, 하지만 수정할 수는 없습니다. c (즉.다른 곳을 가리킬 수는 없습니다).두 번째로는 다음에 할당할 수 있습니다. c 하지만 그러지 말라고 *c, 세 번째에서는 가리키는 위치를 수정할 수 없으며 가리키는 개체를 수정할 수도 없습니다.

이는 여러 수준의 간접 참조로 확장됩니다.귀하의 경우에는 const 한정하는 일치하는 포인터가 있는 키워드.이는 주로 공백 문제이지만 다음과 같습니다.

const char *const *const *foo(int bar);

어느 것이 foo 읽기 전용에 대한 포인터 읽기 전용에 대한 포인터 읽기 전용에 대한 포인터 반환 char.주의 깊게 읽어보세요:이 코드 조각이 주어지면 다음을 참고하세요.

const char *const *const *ptr = foo(0);

그러면 당신은 ptr 은 합법적이지만 다른 할당은 불법입니다. 즉, 다음에 할당할 수 없습니다. *ptr, **ptr, 그리고 ***ptr.

foo 반환합니다 pointer 이는 다음을 가리킨다. constant pointer 다른 것을 가리키는 것 constant pointer 이는 다음을 가리킨다. constant char.다음을 살펴보세요. 나선형 법칙.

int bar;
const char* const* const* ptr = foo(bar);

그래서 기본적으로 당신은 아무것도 변경할 수 없습니다 *ptr 또는 **ptr 또는 ***ptr.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top