似乎可以通过引用第一个元素来传递数组:
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]。当他最终弄清楚您在做什么时,他会因不必要的“聪明”代码误导他而对您感到不高兴。 :)
此外,如果另一个程序员(不知道您的技巧)尝试从自己的代码中调用您的函数,则仅在 header 中看到函数声明后,他可能会尝试执行以下操作:
int cane = 5;
passMe(cane);
...当passMe()尝试引用
cane
之后的数组中的第二项时,这将直接导致运行时神秘的未定义行为,该项实际上不存在,因为甘蔗实际上不在数组中。