#include <iostream>
#include <typeinfo>
using namespace std;
template<size_t N>
void funcArrayRef(int(&ar)[N])
{
cout << "\nfuncArrayRef:\n";
cout << typeid(ar).name() << " " << sizeof(ar) << " byte\n";
cout << "ar[4] " << ar[4] << endl;
}
void funcArray(int(ar)[])
{
cout << "\nfuncArray:\n";
cout << typeid(ar).name() << " " << sizeof(ar) << " byte\n";
cout << "ar[4] " << ar[4] << endl;
}
void funcPointer(int(*ar))
{
cout << "\nfuncPointer:\n";
cout << typeid(ar).name() << " " << sizeof(ar) << " byte\n";
cout << "ar[4] " << ar[4] << endl;
}
int main() {
int x[] = {1,2,3,4,5};
cout << "main:\n";
cout << typeid(x).name() << " " << sizeof(x) << " byte\n";
funcArray(x);
funcPointer(x);
funcArrayRef(x);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZTxzaXplX3QgTj4Kdm9pZCBmdW5jQXJyYXlSZWYoaW50KCZhcilbTl0pCnsKCWNvdXQgPDwgIlxuZnVuY0FycmF5UmVmOlxuIjsKCWNvdXQgPDwgdHlwZWlkKGFyKS5uYW1lKCkgPDwgIiAiIDw8IHNpemVvZihhcikgPDwgIiBieXRlXG4iOwoJY291dCA8PCAiYXJbNF0gIiA8PCBhcls0XSA8PCBlbmRsOwp9Cgp2b2lkIGZ1bmNBcnJheShpbnQoYXIpW10pCnsKCWNvdXQgPDwgIlxuZnVuY0FycmF5OlxuIjsKCWNvdXQgPDwgdHlwZWlkKGFyKS5uYW1lKCkgPDwgIiAiIDw8IHNpemVvZihhcikgPDwgIiBieXRlXG4iOwoJY291dCA8PCAiYXJbNF0gIiA8PCBhcls0XSA8PCBlbmRsOwp9Cgp2b2lkIGZ1bmNQb2ludGVyKGludCgqYXIpKQp7Cgljb3V0IDw8ICJcbmZ1bmNQb2ludGVyOlxuIjsKCWNvdXQgPDwgdHlwZWlkKGFyKS5uYW1lKCkgPDwgIiAiIDw8IHNpemVvZihhcikgPDwgIiBieXRlXG4iOwoJY291dCA8PCAiYXJbNF0gIiA8PCBhcls0XSA8PCBlbmRsOwp9CgppbnQgbWFpbigpIHsKCWludCB4W10gPSB7MSwyLDMsNCw1fTsKCWNvdXQgPDwgIm1haW46XG4iOwoJY291dCA8PCB0eXBlaWQoeCkubmFtZSgpIDw8ICIgIiA8PCBzaXplb2YoeCkgPDwgIiBieXRlXG4iOwoJZnVuY0FycmF5KHgpOwoJZnVuY1BvaW50ZXIoeCk7CglmdW5jQXJyYXlSZWYoeCk7CglyZXR1cm4gMDsKfQ==