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

标签 c++ arrays parameter-passing

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

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/

相关文章:

c++ - RWDBTBuffer<T>、RWDBVector<T> 和 RWDBDecimalVector 的区别

php - 我怎样才能 "dual"内爆嵌套数组?

ruby - 除了数组值之外,如何使用散列?或者如何创建哈希线?

jsf - Icefaces Actionlistener 将参数传递到另一个页面

php - 使用 for 循环帮助将增量值从 jquery 发送到 php 文件

php - 从查询数组中获取第一个元素

c++ - 是否可以在 C++ 中将函数作为参数传递?

C++ 什么版本的directx?

c++ - 全局变量c/c++之间的冲突

arrays - 如何使用变量在 bash 中索引 ${array[*]}?