似乎可以通过引用第一个元素来传递数组:
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)
而不是上面的函数定义。但是上面的方法会引起任何问题吗?知道答案将使我能够更好地理解这里正在发生的事情,如果没有别的的话。
最佳答案
就语言律师和编译器而言,这很好。主要问题将与人类程序员(包括你自己的 future 版本)有关。当您的标准 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 实际上并不存在在数组中。
关于c++ - 传递数组 : by reference to the first element 的病态方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40944706/