#include <iostream>
#include <typeinfo>
struct Type {};
// 1: Array of Type*.
void func(Type *arr [3]) {
std::cout << "Type* array.\n"
<< typeid(arr).name() << "\n\n";
}
// 2: Array of Type&.
// Illegal.
// void func(Type &arr [3]) {
// std::cout << "Type& array.\n"
// << typeid(arr).name() << "\n\n";
// }
// 3: Pointer to array of Type.
void func(Type (*arr) [3]) {
std::cout << "Pointer to Type array.\n"
<< typeid(arr).name() << "\n\n";
}
// 4: Reference to array of Type.
void func(Type (&arr) [3]) {
std::cout << "Reference to Type array.\n"
<< typeid(arr).name() << "\n\n";
}
int main() {
// Array of Type.
Type t_arr[3] = {};
// Array of Type*.
Type* tp_arr[3] = { &t_arr[0], &t_arr[1], &t_arr[2] };
// Array of Type&.
// Illegal.
// Type& tr_arr[3] = { t_arr[0], t_arr[1], t_arr[2] };
std::cout << "Type[3]: " << typeid(t_arr).name() << "\n\n";
func(t_arr); // Calls #4.
func(&t_arr); // Calls #3.
func(tp_arr); // Calls #1.
}
CSNpbmNsdWRlIDxpb3N0cmVhbT4KCSNpbmNsdWRlIDx0eXBlaW5mbz4KCiAgICBzdHJ1Y3QgVHlwZSB7fTsKCiAgICAvLyAxOiBBcnJheSBvZiBUeXBlKi4KICAgIHZvaWQgZnVuYyhUeXBlICphcnIgWzNdKSB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJUeXBlKiBhcnJheS5cbiIKICAgICAgICAgICAgICAgICAgPDwgdHlwZWlkKGFycikubmFtZSgpIDw8ICJcblxuIjsKICAgIH0KCiAgICAvLyAyOiBBcnJheSBvZiBUeXBlJi4KICAgIC8vIElsbGVnYWwuCiAgICAvLyB2b2lkIGZ1bmMoVHlwZSAmYXJyIFszXSkgewogICAgLy8gICAgIHN0ZDo6Y291dCA8PCAiVHlwZSYgYXJyYXkuXG4iCiAgICAvLyAgICAgICAgICAgICAgIDw8IHR5cGVpZChhcnIpLm5hbWUoKSA8PCAiXG5cbiI7CiAgICAvLyB9CgogICAgLy8gMzogUG9pbnRlciB0byBhcnJheSBvZiBUeXBlLgogICAgdm9pZCBmdW5jKFR5cGUgKCphcnIpIFszXSkgewogICAgICAgIHN0ZDo6Y291dCA8PCAiUG9pbnRlciB0byBUeXBlIGFycmF5LlxuIgogICAgICAgICAgICAgICAgICA8PCB0eXBlaWQoYXJyKS5uYW1lKCkgPDwgIlxuXG4iOwogICAgfQoKICAgIC8vIDQ6IFJlZmVyZW5jZSB0byBhcnJheSBvZiBUeXBlLgogICAgdm9pZCBmdW5jKFR5cGUgKCZhcnIpIFszXSkgewogICAgICAgIHN0ZDo6Y291dCA8PCAiUmVmZXJlbmNlIHRvIFR5cGUgYXJyYXkuXG4iCiAgICAgICAgICAgICAgICAgIDw8IHR5cGVpZChhcnIpLm5hbWUoKSA8PCAiXG5cbiI7CiAgICB9CiAgICAKICAgIGludCBtYWluKCkgewogICAgICAgIC8vIEFycmF5IG9mIFR5cGUuCiAgICAgICAgVHlwZSAgIHRfYXJyWzNdID0ge307CgogICAgICAgIC8vIEFycmF5IG9mIFR5cGUqLgogICAgICAgIFR5cGUqIHRwX2FyclszXSA9IHsgJnRfYXJyWzBdLCAmdF9hcnJbMV0sICZ0X2FyclsyXSB9OwoKICAgICAgICAvLyBBcnJheSBvZiBUeXBlJi4KICAgICAgICAvLyBJbGxlZ2FsLgogICAgICAgIC8vIFR5cGUmIHRyX2FyclszXSA9IHsgdF9hcnJbMF0sIHRfYXJyWzFdLCB0X2FyclsyXSB9OwoKICAgICAgICBzdGQ6OmNvdXQgPDwgIlR5cGVbM106ICIgPDwgdHlwZWlkKHRfYXJyKS5uYW1lKCkgPDwgIlxuXG4iOwogICAgICAgIAogICAgICAgIGZ1bmModF9hcnIpOyAgLy8gQ2FsbHMgIzQuCiAgICAgICAgZnVuYygmdF9hcnIpOyAvLyBDYWxscyAjMy4KICAgICAgICBmdW5jKHRwX2Fycik7IC8vIENhbGxzICMxLgogICAgfQo=