传递数组的一种病态方式:通过引用第一个元素

Fre*_*Air 3 c++ arrays parameter-passing

似乎可以通过引用第一个元素来传递数组:

void passMe(int& firstElement)
{
    int* p=&firstElement;
    cout << p[0] << p[1];
}
Run Code Online (Sandbox Code Playgroud)

主程序:

int hat[]={ 5,2,8 };
passMe(hat[0]);
Run Code Online (Sandbox Code Playgroud)

通常,而不是上面的函数定义,我会做void passMe(int* myArray)void passMe(int[] myArray).但上述方法会导致任何问题吗?知道答案将使我能够更好地理解这里发生的事情,如果没有别的话.

Jer*_*ner 8

就语言律师和编译器而言,这很好.主要问题将是人类程序员(包括你自己的未来版本).当您的标准C++程序员在程序中看到这个时:

void passMe(int& firstElement);  // function declaration (in a .h file)

int hat[]={ 5,2,8 };
passMe(hat[0]);
Run Code Online (Sandbox Code Playgroud)

他希望passMe()可以读取和/或修改hat [0].他绝对不会指望passMe()可能会读取和/或修改hat [1].当他最终弄明白你在做什么时,他会因为不必要的"聪明"代码误导他而对你感到非常沮丧.:)

此外,如果另一个程序员(谁不知道你的技巧)试图从他自己的代码调用你的函数,只看到标题中的函数声明后,他可能会尝试做这样的事情:

int cane = 5;
passMe(cane);
Run Code Online (Sandbox Code Playgroud)

...当passMe()尝试引用数组中的第二个项目时,这将直接导致运行时神秘的未定义行为,cane因为cane实际上不在数组中,所以它实际上不存在.