차이점은 무엇입니까?
char * const
과
const char *
답변
차이점은에 const char *대한 포인터 const char이고, char * const에 대한 상수 포인터 char입니다.
첫 번째로 가리키는 값은 변경할 수 없지만 포인터는 변경할 수 있습니다. 두 번째, 가리키는 값은 변경 될 수 있지만 포인터는 참조와 유사하지 않습니다.
또 한있다
const char * const
상수 char에 대한 상수 포인터입니다 (따라서 변경할 수는 없습니다).
노트 :
다음 두 가지 형태가 동일합니다.
const char *
과
char const *
정확한 이유는 C ++ 표준에 설명되어 있지만 혼동을 피하고 피하는 것이 중요합니다. 선호하는 몇 가지 코딩 표준을 알고 있습니다.
char const
위에
const char
(포인터가 있거나없는) const요소 의 배치 는 pointer와 동일 const합니다.
답변
혼동을 피하려면 항상 const 한정자를 추가 하십시오.
int * mutable_pointer_to_mutable_int;
int const * mutable_pointer_to_constant_int;
int *const constant_pointer_to_mutable_int;
int const *const constant_pointer_to_constant_int;
답변
const 형식 선언에서 첫 번째 일 때를 제외하고 그 앞 (왼쪽)에 오는 것을 항상 수정하고, 그 뒤에 오는 것을 수정합니다 (오른쪽에).
따라서이 두 가지는 동일합니다.
int const *i1;
const int *i2;
그들은에 대한 포인터를 정의합니다 const int. 위치 i1와 i2지점을 변경할 수 있지만 해당 지점의 값을 변경할 수는 없습니다.
이:
int *const i3 = (int*) 0x12345678;
const정수에 대한 포인터를 정의하고 메모리 위치 12345678을 가리 키도록 초기화합니다 int. 주소 12345678 의 값을 변경할 수 있지만 i3가리키는 주소는 변경할 수 없습니다 .
답변
const * char유효하지 않은 C 코드이며 의미가 없습니다. 아마도 당신은 a const char *와 a char const *의 차이 또는 a 와 a 의 차이를 물어 보려고했습니다 const char *.char * const ?
또한보십시오:
답변
const char*상수 문자
char* const에 대한 포인터입니다. 문자
const char* const에 대한 상수 포인터입니다. 상수 문자 에 대한 상수 포인터입니다.
답변
경험 법칙 : 정의를 오른쪽에서 왼쪽으로 읽으십시오!
const int *foo;
” foo포인트 ( *)는 int변경할 수없는 ( const)”을 의미합니다.
프로그래머에게 이것은 ” 이것이 가리키는 것의 가치 를 바꾸지 않을 것”을 의미 foo합니다.
*foo = 123;또는foo[0] = 123;유효하지 않습니다.foo = &bar;허용됩니다.
int *const foo;
” foo는 ( const) 및 ( *)를 int“로 변경할 수 없음을 의미 합니다.
프로그래머에게 이것은 ” 참조 하는 메모리 주소 를 변경하지 않겠다 foo“는 의미입니다.
*foo = 123;또는foo[0] = 123;허용됩니다.foo = &bar;유효하지 않습니다.
const int *const foo;
수단 “은 foo변경할 수 없습니다 ( const)과 점 ( *)는에 int그 수없는 변화 ( const)”.
프로그래머에게 이것은 ” 포인팅 한 값 을 foo변경하지 않으며 참조 하는 주소 를 변경하지 않을 것 foo” 을 의미합니다.
*foo = 123;또는foo[0] = 123;유효하지 않습니다.foo = &bar;유효하지 않습니다.
답변
-
const char * x 여기서 X는 기본적으로 상수 값을 가리키는 문자 포인터입니다.
-
char * const x 는 상수 인 문자 포인터를 나타내지 만, 가리키는 위치는 변경 될 수 있습니다.
-
const char * const x 는 1과 2의 조합으로 상수 값을 가리키는 상수 문자 포인터임을 의미합니다.
-
const * char x 는 컴파일러 오류를 일으 킵니다. 선언 할 수 없습니다.
-
char const * x 는 포인트 1과 같습니다.
일반적으로 const 가 var name 인 경우 포인터는 일정하지만 포인팅 위치는 변경할 수 있습니다 . 그렇지 않으면 포인터는 일정한 위치를 가리키고 포인터는 다른 위치를 가리킬 수 있지만 포인팅 위치 내용은 변경할 수 없습니다 .
