매개 변수로 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::string
conts char*
에 의해 용이함.c_str()
변환하는 것은std::string
char*
그렇게 쉽지는 않습니다.
제가 너무 까다롭나 봐요.제 책에서 컨스챠*가 가리키는 캐릭터는 컨스챠*를 통해 변경될 수 있지만 변경되지는 않습니다.상수 *는 수정 가능한 저장소를 가리킬 수 있습니다.예:
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
'programing' 카테고리의 다른 글
스프링 보안:WebSecurityConfigurer 어댑터가 없는 Global Authentication Manager (0) | 2023.07.26 |
---|---|
이미지 업로드 후 dropzone.js 섬네일 이미지 지우기 (0) | 2023.07.26 |
MySQL ERROR 1231(42000):변수 'character_set_client'를 'NULL' 값으로 설정할 수 없습니다. (0) | 2023.07.26 |
특히 malloc가 하나 이상 있을 때 C에서 malloc 고장을 어떻게 올바르게 처리할 수 있습니까? (0) | 2023.07.26 |
콜리메이션이 이해가 안 돼요?(Mysql, RDBMS, 문자 집합) (0) | 2023.07.21 |