찾다

 >  Q&A  >  본문

c++ - char* p="123"这句代码为什么是对的?

如题,C风格字符串,"123"不是const char *类型的常量么?为什么赋给一个普通指针是可以的呢?

迷茫迷茫2808일 전1011

모든 응답(7)나는 대답할 것이다

  • 伊谢尔伦

    伊谢尔伦2017-04-17 15:20:09

    이렇게 하면 오류가 보고되지 않지만 p가 가리키는 123 문자열을 수정하려고 하면 메모리 액세스 위반이 발생합니다. "123"은 문자열 상수이므로 읽기 전용 저장 영역에 저장됩니다. const char*이 필요한 이유는 프로그래머가 실수로 123을 수정하는 것을 방지하기 위함입니다.

    회신하다
    0
  • PHPz

    PHPz2017-04-17 15:20:09

    초보자를 위한 답변
    "123"은 const char 유형의 객체입니다. const char * p는 오른쪽에서 왼쪽으로 읽어야 합니다. 즉, p는 포인터이고 가리키는 객체는 const char 유형입니다. 이것은 정확하지 않습니다. 같은 방식으로 p가 가리키는 객체가 const char인 한 끝에 p = "456";을 추가하는 것이 옳습니다.

    회신하다
    0
  • PHPz

    PHPz2017-04-17 15:20:09

    char *p = "123";은 문자 배열을 나타냅니까? 문자열입니다

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-17 15:20:09

    -Wall을 컴파일하고 추가하면 경고가 표시됩니다.

    으아악

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-04-17 15:20:09

    char *p = "123"; 실제로는 두 개의 프로세스입니다. 상수 영역에 문자열 공간을 할당하고, 문자 포인터 p를 선언하고, p가 문자열이 있는 메모리 공간을 가리킵니다. 즉시 정정해주세요

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-17 15:20:09

    C언어가 남긴 함정

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-17 15:20:09

    이것은 c와의 호환성을 위해 남겨둔 것입니다

    회신하다
    0
  • 취소회신하다