3.9/6 N3797 :알 수없는 크기의 배열에 대한 포인터가 불완전합니까?
가가 [...]
또는 typedef를 선언하여 정의 타입의 알려지지 않은 크기의 어레이에 대한 포인터의 타입은 알려지지 않은 크기의 배열 될 , 을 완료 할 수 없습니다.
알 수없는 크기의 배열에 대한 포인터처럼 들리는 것은 불완전한 유형입니다. 그렇다면 알 수없는 크기의 배열에 대한 포인터 객체를 정의 할 수 없습니다. 그러나 미지의 경계를 정의 할 수 있기 때문에 사실이 아닙니다.
#include <iostream>
using std::cout;
using std::endl;
int (*a)[] = (int(*)[])0x4243afff;
int main()
{
}
잘 컴파일됩니다.
우리는 불완전한 형태 인 경우에 그것을 할 could't. 사실 : 3.9/5 :
객체는 3./5 다음과 같이 표준 이전에 불완전한 유형을 정의
불완전한 유형을 정의 할 수 없다 :
클래스가 열거 형인 경우 특정 컨텍스트 (7.2) 또는 알 수없는 크기의 배열 또는 불완전한 요소 유형의 배열이 불완전하게 정의 된 개체 유형입니다. 불완전하게 정의 된 객체 유형 및 void 유형이 불완전한 유형 (3.9.1)입니다.
이는 불완전한 유형의 포인터가 완료되었음을 의미합니다. 모순?
그래서 내가 내 추론에서 잘못 되었나요?
왜 당신은 불완전한 유형의 포인터를 가질 수 없다고 생각하십니까? – BadZen
은 "typedef 구조체 목록 {void * value; struct list * nxt; } 목록 "? – BadZen
그건 배열이 아니에요 그냥 메모리 주소예요 –