이 선언은 매우 혼란?혼란 선언과 초기화
new char[1024]{}
은 각각 0
의 값을 갖는 1024 요소의 char
배열을 초기화한다고 생각합니다.
char* q = [0,0,....] // until 1024
올바른 :
그래서이 동일하다?
이 선언은 매우 혼란?혼란 선언과 초기화
new char[1024]{}
은 각각 0
의 값을 갖는 1024 요소의 char
배열을 초기화한다고 생각합니다.
char* q = [0,0,....] // until 1024
올바른 :
그래서이 동일하다?
q
같은지 char
포인터이다
char* q = new char[1024]{};
같다. 즉, 형식은 char *
입니다.
char
의 배열을 동적으로 할당하고 0으로 초기화하는 식 new char[1024]{}
을 사용하여 초기화됩니다. 이것이 실패하면 예외가 발생합니다.
q
은 동적으로 할당 된 배열의 첫 번째 char
을 가리 킵니다. 배열이 아닙니다.
그것은
숯의 Q * = [0,0, ....] //와 동일하지
즉 잘못된 구문 때문에 1,024까지. q
포인터이며, 값들의 세트로 초기화 될 수 없기 때문에 또한
char* q = {0,0,....}; // 1024 zeros in initialiser
동등하지 않다. 그것은 문자가 아니라 처음 초기화되지 않은 다음 물론 제로 (그리고, 덮어 쓰기 것보다, 제로로 초기화하는 것을 제외하고
char *q = new char[1024]; // dynamically allocates chars uninitialised here
std::fill(q, q + 1024, '\0');
에 (순) 효과 가까운, 그것은 초기화합니다 어떻게 컴파일러에 달려있다 문자).
감사합니다. 훌륭한 설명! 나는 이제'p'가 단순히 첫 번째 요소의 주소를 가리킨다는 것을 이해합니다. ** 1024 **'8 비트 조각 메모리 '(정확한 용어가 확실하지 않음)가 힙에 예약되어 있고'0 '으로 초기화되었다고 말하는 것이 맞습니까? –
@SamHammamy "적어도 1024 개의 주소 지정 가능한 메모리 단위 크기의 메모리가 new 연산자로 할당되었습니다"라는 (지나치게) 올바른 표현이됩니다. '적어도'컴파일러는 배열을위한 더 많은 메모리를 할당 할 수 있기 때문에, '주소 지정 가능한 메모리 유닛'은 char이 가장 작은 주소 지정 가능한 메모리 유닛을 정의하고 비트 단위로 카운팅하는 것이 보조이기 때문입니다. 'operator new'는 힙이 표준에 의해 인식되지 않기 때문입니다. 정상적인 기계에서 이것은 비록 당신이 말한 것과 같을지라도 – WorldSEnder
@SamHammamy - 나는 그것이 정확하다고 말하지 않을 것입니다.'new' 표현식은'1024' (더 엄격하게'char'의 크기의 1024 배) 크기의 메모리를 동적으로 할당하지만, 표준은'sizeof (char)'를'1'로 정의합니다. WorldSEnder가 지적했듯이, 구현은 더 많은 것을 할당 할 수 있습니다 (예 : 시스템 종속적 인 "블록 크기"의 배수로 올림). 그러나 프로그램이이를 존중할 수는 없습니다. "힙"은 일부 (구형) 시스템의 메모리 관리에 대한 구현 세부 사항이며 표준이 요구하는 것 또는 다른 시스템이 수행하는 것을 반영하지 않습니다. 마지막으로 'char'는 8 비트 이상일 수 있습니다. – Peter
char* q {new char[1024]{}};
차례로
char* q = new char[1024] { 0, 0, 0, 0 /* 1020 more zeros */ }
'char * q'는'char'에 대한 포인터입니다. – melpomene