그래서 우리는 내가 배열이 있다고 가정하자, 나는 'A'의 형식을 확인한다면 지금T 배열이 T 포인터로 쇠약 해지면 배열 T로 다시 변환 할 수 있습니까?
int a[3] = { 1, 2, 3 };
을 내 컴퓨터에서 나는 얻을 :
cout<<typeid(a).name(); // prints 'A3_i'
을 지금은 주소를 가지고가는 경우 'A', 그 주소를 역 참조, 유형이 변경되지 않는의 ('주소를 복용'때문에 내 마음에, 내가 정말 좋아하는와 '역 참조'입니다 역 동작) : 그러나 나는 derefere 경우
cout<<typeid(*&a).name(); // also prints 'A3_i'
nce 'a'를 먼저 입력 한 후 그 주소를 가져 가면 은으로 변경됩니다 (내가 선호하는 배열을 역 참조 할 때 내가 int를 가져야하고 주소를 취할 때 내가 마음에 들지 않습니다. 그 INT, 나는 포인터 - 투 - INT를 받아야하고, 밝혀 I)가 수행
1) 배열 형이로 붕괴되면 : 그래서 여기
cout<<typeid(&*a).name(); // prints 'Pi'
내 두 가지 질문 있습니다 pointer-type, 어쨌든 배열 타입으로 되돌릴 수 있습니까?
cout<<typeid((int[3]) &*a).name(); // does not compile
// "error: ISO C++ forbids casting to an array type `int [3]'"
일하는 것이 다른 캐스트가 있습니까 :
나는 주조와 같은 - 당신 - 방금 본건 케어의 분명한 전략을 시도? 또는이 유형의 변환은 엄격히 제한을 벗어나는 것입니까?2) 배열 유형으로 되돌아 갈 수 있는지 여부에 관계없이 정확히 감추어 져있는 포인터 정보에서 슬라이스되고 손실되는 정보는 무엇입니까?
포인터 유형과 배열 유형이 동일하지 않다는 것을 알고 있습니다. 필자는 배열 타입이 포인터 타입에 저장된 정보의 엄격한 수퍼 셋이라고 가정합니다. 이 말이 맞습니까?
배열 형식의 추가 정보는 다음과 같습니다. 배열이 스택에 있는지 여부와 배열의 크기에 대한 정보 (배열의 크기를 어떻게 든 알고 있어야합니다. 유형의 일부입니다. 맞습니까?). 어레이 유형에 숨겨진 다른 정보가 있습니까?
int []는 형식이지만 int [3]은 형식이 아닙니다. –
@Daniel : "3 ints의 배열"은 "int []"와 분명히 다르며 "int [3]"은 전자의 합리적인 속기처럼 보입니다. –
뭐라하던간에. –