2017-02-13 8 views
-1

함수 정의 될한다고 가정 배열의 첫 번째 블록의 주소를 전달할 때변수/배열의 주소를 취하는 함수에서 c를 선언하면 전달하는 주소에서만 작동해야합니다. 상수와도 함께 작동하는 이유는 무엇입니까?

int strlength (char str[]) { 
      int i; 
      for(i=1;str[i]!='\0';i++); 
      return i; 
     } 

그것만 작동한다, 즉 '& STR [0]'OR 'STR'하지만 심지어 상수 문자열을 전달 작동 "AnswerPlease"라고합시다. 왜?

+2

왜 "문자열 상수를 전달할 때도"작동하지 않아야합니까? 'strlength()'는'str'이 가리키는 데이터를 변경하려고하지 않습니까? – chux

+0

문자열 리터럴은'char'와'int'와는 다른 특별한 것들입니다. ''Blahblahblah ''를 사용하면 메모리에 문자열 리터럴을 실제로 저장합니다. 다른 것과는 달리, 'C'는 메모리가 할당되지 않은 곳을 말합니다. 아래의 대답에서 알 수 있듯이 문자열 리터럴은'static const char []'이며 배열의 경우와 마찬가지로 첫 번째 요소의 주소를 가져옵니다. –

답변