似乎可以通过引用第一个元素来传递数组:
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)
,而不是上述功能定义。但上述方法会导致任何问题吗?知道答案可以让我更好地理解这里发生的事情,如果没有别的话。
答案 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实际上不在数组中