차이점은 무엇입니까?
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 인 경우 포인터는 일정하지만 포인팅 위치는 변경할 수 있습니다 . 그렇지 않으면 포인터는 일정한 위치를 가리키고 포인터는 다른 위치를 가리킬 수 있지만 포인팅 위치 내용은 변경할 수 없습니다 .