생활
C/C++ 배열은 어떤 타입인가요?
#include <iostream>
#include <typeinfo>
using std::cout;
using std::endl;
template<typename T>
decltype(auto) type(T t) {
return typeid(t).name();
}
#define printType(v) cout << typeid(v).name() << endl;
int main() {
int arr[10][10];
printType(arr) // A10_A10_i (int[10][10])
auto copy = arr;
printType(copy) // PA10_i (int(*)[10])
auto reference = &arr;
printType(reference) // PA10_A10_i (int(*)[10][10])
auto dereferenced = *reference;
printType(dereferenced) // PA10_i (int(*)[10])
auto byPointer = type<int (*)[10]>(arr);
cout << byPointer << endl; // PA10_i (int(*)[10])
auto byArray = type<int[999][10]>(arr);
cout << byArray << endl; // PA10_i (int(*)[10])
auto byAuto = type(arr);
cout << byAuto << endl; // PA10_i (int(*)[10])
auto referenceByAuto = type(&arr);
cout << referenceByAuto << endl; // PA10_A10_i (int(*)[10][10])
return 0;
}
위 코드에서 int arr[10][10];으로 int[10][10] 타입의 변수 arr을 선언했습니다.
그러나 &arr은 int(*)[10][10] 타입, *&arr이나 arr로부터 만든 변수도 int(*)[10] 타입으로
어떤 방법으로도 arr로부터 int[10][10] 타입의 변수를 선언&초기화하지 못했습니다.
(decltype(auto) decltypeAuto = arr;는 오류 (array initializer must be an initializer list))
배열은 정확히 어떤 타입인가요? 포인터와 무엇이 다른가요?
배열 타입의 변수는 어떻게 다른 변수로부터 초기화할 수 있나요?
&arr은 int(*)[10][10]인데 *&arr은 왜 int[10][10]이 아닌 int(*)[10]인가요?
배열, 배열 포인터, 포인터 배열을 참조/역참조할 때는 어떤 규칙을 따르나요?
1개의 답변이 있어요!