programing

매개 변수로 char* vs const char*

telebox 2023. 7. 26. 21:48
반응형

매개 변수로 char* vs const char*

사용할 때 컴파일 오류가 발생하는 경우가 많습니다.char*대신에const char*그래서 저는 실제 차이, 구문 및 컴파일 메커니즘을 잘 모르겠습니다.

둘 사이의 차이를 찾고 있다면 다음과 같이 생각해 보십시오.

  • char*는 변경할 수 있는 char 형식의 값을 포함하는 위치를 가리키는 포인터입니다.포인터의 값을 변경할 수 있습니다. 즉, 포인터가 다른 위치를 가리키도록 수정할 수 있습니다.
  • const char*는 변경할 수 없는 char 형식의 값을 포함하는 위치를 가리키는 포인터입니다.

const char *"수정할 수 없는 문자를 의미합니다."일반적으로 수정해서는 안 되는 문자열에 사용됩니다.

다음 함수를 작성한다고 가정합니다.

int checkForMatch(const char * pstr)

당신은 (함수 서명을 통해) 지적된 것을 변경하지 않겠다고 약속했습니다.pstr이제 일치 여부를 확인하는 과정에서 대소문자를 무시하고 다른 검사를 수행하기 전에 문자열을 대문자로 변환하여 검사를 수행하려고 했습니다.

strupr(pstr);

그럴 수 없다는 오류가 발생할 것입니다. 왜냐하면strupr다음과 같이 선언됩니다.

char * strupr(char* str);

...즉, 문자열에 쓸 수 있기를 원한다는 것입니다.캐릭터에 글을 쓸 수 없습니다.const char *(그것이 바로 그것입니다.const대상).

일반적으로, 당신은 다음을 통과할 수 있습니다.char *예상되는 것으로const char *그것은 안전한 것이기 때문에 명시적인 캐스팅 없이(수정할 의도가 없는 것에 수정 가능한 것을 제공), 하지만 당신은 통과할 수 없습니다.const char *을 기대하며.char *(명시적인 캐스팅 없이) 그것은 안전한 일이 아니기 때문입니다(수정할 수 없는 것을 수정할 수 있는 것으로 수정).

물론, 이것은 C이고, 당신은 명시적으로 캐스팅하는 것을 포함하여 C에서 거의 모든 것을 할 수 있습니다.const char *아주char *하지만 포인터가 가리키는 것이 (아마도) 어떤 이유가 있기 때문에 그것은 정말 정말 나쁜 생각일 것입니다.const.

  • char * :non-constant에 대한 지침.non-constant성격
  • const char * :non-constant에 대한 지침.constant성격
  • char *const :constant에 대한 지침.non-constant성격
  • const char * const :constant에 대한 지침.constant


Reference [링크]

저는 를 매항개정합니다고려의하로 정의하려고 합니다.const char*것은 아니다.char* …에서 변환하기 때문입니다.std::stringconts char*에 의해 용이함.c_str() 변환하는 것은std::stringchar*그렇게 쉽지는 않습니다.

제가 너무 까다롭나 봐요.제 책에서 컨스챠*가 가리키는 캐릭터는 컨스챠*를 통해 변경될 수 있지만 변경되지는 않습니다.상수 *는 수정 가능한 저장소를 가리킬 수 있습니다.예:

char a[] = "abracadabra";
const char * ccp = &a[0]; // ccp points to modifiable storage.
*&a[0] = 'o'; // This writes to a location pointed to by const char* ccp

그래서 제 표현은 다음과 같습니다.

char *는 변경된 포인터이며 * 또는 []를 통해 참조되지 않을 때 해당 포인터를 통해 쓸 수도 있습니다.

constchar *는 변경된 포인터이며 * 또는 []를 통해 참조되지 않을 때 이 포인터를 통해 쓸 수 없습니다.

언급URL : https://stackoverflow.com/questions/3179645/char-vs-const-char-as-a-parameter

반응형