传递数组的一种病理方式:参考第一个元素



似乎可以通过参考第一个元素传递数组:

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),而不是上述函数定义。但是上面的方法会引起任何问题吗?知道答案将使我能够更好地了解这里玩耍的事物,如果没有其他的话。

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

void passMe(int& firstElement);  // function declaration (in a .h file)
int hat[]={ 5,2,8 };
passMe(hat[0]);

他将期望passme()可能会读取和/或修改帽子[0]。他绝对不是会期望Passme()可能会读取和/或修改帽子[1]。当他最终弄清楚您在做什么时,他会因为不必要的"聪明"代码对他的误导而感到沮丧。:)

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

int cane = 5;
passMe(cane);

...当passme()试图引用 cane阵列中的第二个项目时,它将直接导致神秘的未定义行为,这实际上不存在,因为甘蔗实际上并不在数组中。

最新更新