2011-10-12 7 views
7

다음 할당이 유효합니까? 아니면 이러한 문제로 인해 문제가 발생합니다. 제발 제안 해주세요.const char 포인터 할당

const char * c1; 
const char * c2; 
const char * c3; 
char * c4; 

c2 = c1; 
c2 = c3; 
c2 = c4; 

만약 내가 다음을 수행하면 어떻게해야할까요?

const char * c5 = "xyz"; 
char * c6 = "abc"; 

c2 = c5; 
c2 = c6; 
+0

@ Kshitij Mehta - 숙제가 아닌 우리는 광대 한 코드 기반으로 메모리 문제에 직면하고 있습니다. 그래서 어떤 도움을 주시면 감사하겠습니다. – user32262

+0

@user 당신은 몇 번이나 같은 질문을했습니다. 우리는 그들에게 계속해서 대답했습니다. 이 질문에 대한 수정 사항은 아무 것도 추가하지 않습니다. 위의 질문을 반복합니다. –

+1

같은 것을 묻는다면 사과드립니다. 어쩌면 포인터로 내 이해가 acurate되지 않습니다. – user32262

답변

9

모든 포인터는 유효하지 않은 상태로 남겨 두거나 유효하지 않은 메모리 위치를 가리키고 있지 않으므로 참조를 취소하지 마십시오.

포인터가 일정하지 않지만 포인터가 가리키는 값이 일정하기 때문에 유효합니다. 따라서 포인터는 다른 위치를 가리 키도록 다시 할당 할 수 있습니다.

3

이러한 과제는 모두 내가 거의 동일한 질문에 대한 귀하의 최근 실행에서 설명한 바와 같이 완벽하게 유효합니다.

const char*은 해당 포인터를 사용하여 수정할 수없는 메모리에 대한 포인터입니다. 여기를 무시하면 그 어떤 것도 막을 수 없습니다. 그 이후 컴파일러는 c4 = c1을 할당하면 객체를 상속합니다. const를 우회합니다.

30

마음 속에서 asterik을 통해 선을 그리십시오. 포인터 p이 일정 등을 p 포인트 문자입니다 - - 즉, 모두 변경할 수 없습니다 왼쪽에와

  1. const char * const p 예를 들어 포인터

    어떤 종류의 오른쪽으로 지적되고있는 것입니다 포인터 및 내용은 p을 가리키며

  2. const char * p - p은 상수 문자를 가리 킵니다. p의 값을 변경하여 다른 상수 문자를 가리 키도록 할 수 있습니다. 그러나 p이 무엇이든간에 내용을 변경할 수는 없습니다.
  3. char * const p - 당신은 포인터를 변경할 수 없습니다하지만 내용

마지막

  1. char * p 변경할 수 있습니다 - 모든 도움 잡고

희망를 위해입니다.

+0

첫 번째 예에서 2 *를 의미합니까? –

+0

매우 명확합니다. 좋은 게시물. 나는 왜 내가'const char * ptr'을 입력 인자로 바꿀 수 있는지 궁금해하고 있었고, 이것으로 완벽하게 설명되었다. 나는 40 분 동안 투표에서 벗어났다. 그래서 나는 그 후 ++를 쓸 것이다. – stevieb

0

모두 문제가있는 행은 char * c6 = "abc";입니다. 여기서 "abc"는 const 리터럴이므로 const가 아닌 포인터에 할당하면 안전하지 않으므로 컴파일 오류가 아닌 경우 최소한 경고를 생성해야합니다 (나는 그것을 컴파일하려고하지 않았다).