[c] char * const와 const char *의 차이점은 무엇입니까?

차이점은 무엇입니까?

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. 위치 i1i2지점을 변경할 수 있지만 해당 지점의 값을 변경할 수는 없습니다.

이:

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; 유효하지 않습니다.

답변

  1. const char * x 여기서 X는 기본적으로 상수 값을 가리키는 문자 포인터입니다.

  2. char * const x 는 상수 인 문자 포인터를 나타내지 만, 가리키는 위치는 변경 될 수 있습니다.

  3. const char * const x 는 1과 2의 조합으로 상수 값을 가리키는 상수 문자 포인터임을 의미합니다.

  4. const * char x 는 컴파일러 오류를 일으 킵니다. 선언 할 수 없습니다.

  5. char const * x 는 포인트 1과 같습니다.

일반적으로 const 가 var name 인 경우 포인터는 일정하지만 포인팅 위치는 변경할 수 있습니다 . 그렇지 않으면 포인터는 일정한 위치를 가리키고 포인터는 다른 위치를 가리킬 수 있지만 포인팅 위치 내용은 변경할 수 없습니다 .