>  기사  >  백엔드 개발  >  C에서 `char*`와 `char[]`의 차이점은 무엇입니까?

C에서 `char*`와 `char[]`의 차이점은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-27 04:47:02629검색

 What's the Difference between `char*` and `char[]` in C?

char*와 char의 구별 이해[]

C 프로그래밍에서 문자 배열과 포인터를 다룰 때, char str[] = "Test"; 간의 근본적인 차이점 and char *str = "Test";.

char str[] = "Test";

이 선언에서 str은 문자(문자) 배열을 나타냅니다. 고정된 크기로 "Test" 문자열의 내용으로 초기화됩니다. 배열은 자체 메모리를 소유하며 원래 문자열 리터럴과 다릅니다. str을 수정하면 "Test" 문자열 자체가 아닌 데이터의 로컬 복사본이 변경됩니다.

char *str = "Test";

여기서 str 포인터, 특히 문자열 리터럴 "Test"의 첫 번째 문자에 대한 포인터입니다. 포인터는 이 문자의 메모리 주소를 저장합니다. 그러나 str은 문자열이 저장된 메모리를 소유하지 않는다는 점을 기억하는 것이 중요합니다. 대신 읽기 전용(const) 문자열 리터럴을 가리킵니다. 결과적으로 str이 가리키는 문자열을 변경하려고 하면 정의되지 않은 동작이 발생합니다.

주요 차이점:

  1. 소유권: char[] 배열은 데이터를 소유하는 반면 char* 포인터는 다른 엔터티가 소유한 데이터를 참조합니다.
  2. 가변성: char[] 배열은 수정할 수 있지만(예: 새 값 할당) char * 포인터는 불변 리터럴을 가리키며 포인터가 가리키는 데이터 변경은 정의되지 않습니다.
  3. 메모리 할당: char[] 배열은 스택에 로컬 메모리를 할당하는 반면 char* 포인터는 다음을 참조할 수 있습니다. 리터럴 및 기타 할당된 메모리를 포함하여 프로그램의 모든 위치에 있는 메모리.
  4. 크기 결정: char[] 배열의 크기는 컴파일 타임에 고정되는 반면, char[] 배열의 크기는 char* 포인터는 데이터 자체 또는 외부 메모리 할당에 의해 결정됩니다.

위 내용은 C에서 `char*`와 `char[]`의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.