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

时间:2016-12-03 05:48:13

标签: c++ arrays parameter-passing

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

void passMe(int& firstElement)
{
    int* p=&firstElement;
    cout << p[0] << p[1];
}

主程序:

int hat[]={ 5,2,8 };
passMe(hat[0]);

通常,我会执行void passMe(int* myArray)void passMe(int[] myArray),而不是上述功能定义。但上述方法会导致任何问题吗?知道答案可以让我更好地理解这里发生的事情,如果没有别的话。

1 个答案:

答案 0 :(得分:8)

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

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

int hat[]={ 5,2,8 };
passMe(hat[0]);

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

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

int cane = 5;
passMe(cane);

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