표현식 type name[count]
이 일부 함수로 작성된 경우 C 컴파일러에 스택 프레임 sizeof(type)*count
바이트 를 할당 하고 배열의 첫 번째 요소 주소를 계산하도록 지시 합니다.
표현식 type name[count]
이 모든 함수 외부에 작성되고 정의를 정의하는 경우 C 컴파일러에게 데이터 세그먼트 sizeof(type)*count
바이트 를 할당 하고 배열의 첫 번째 요소 주소를 계산하도록 지시 합니다.
name
실제로 배열의 첫 번째 요소의 주소를 저장하는 상수 객체이며 일부 메모리의 주소를 저장하는 모든 객체를 포인터라고하므로 name
배열이 아닌 포인터로 취급하는 이유 입니다. C의 배열은 포인터를 통해서만 액세스 할 수 있습니다.
count
0으로 평가되는 상수 식인 경우 C 컴파일러에 스택 프레임 또는 데이터 세그먼트에 0 바이트를 할당하고 배열의 첫 번째 요소 주소를 반환하도록 지시하지만이 작업의 문제점은 첫 번째 요소라는 것입니다. 길이가 0 인 배열이 존재하지 않으며 존재하지 않는 주소를 계산할 수 없습니다.
이것은 요소 번호에 합리적입니다. 길이 배열에 count+1
존재하지 않으므로 count
이것이 C 컴파일러가 길이가 0 인 배열을 함수 안팎의 변수로 정의하는 것을 금지하는 이유입니다. 당시 내용은 무엇 name
입니까? 어떤 주소가 name
정확히 저장됩니까?
경우 p
포인터가 그 표현은 p[n]
동일하다*(p + n)
올바른 표현 별표 * 수단에 의해 지시 된 메모리 액세스 포인터의 참조 해제 조작 인 경우 p + n
, 그 주소에 저장되어있는 메모리 나 액세스 p + n
, p + n
포인터의 표현을 그것의 주소를 얻어 p
,이 어드레스 번호를 추가 n
곱 포인터 타입의 크기 p
.
주소와 번호를 추가 할 수 있습니까?
예, 주소는 일반적으로 16 진수 표기법으로 표시되는 부호없는 정수이므로 가능합니다.