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

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之后的数组中的第二项时,这将直接导致运行时神秘的未定义行为,该项实际上不存在,因为甘蔗实际上不在数组中。

10-04 14:17