gpt4 book ai didi

c++ - 传递数组 : by reference to the first element 的病态方式

转载 作者:太空狗 更新时间:2023-10-29 20:02:26 27 4
gpt4 key购买 nike

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

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com