函数的一些重要参数是指针,地址和数组。
void somethingHappens (int *a); //pointers
void somethingHappens (int& a); //address
void somethingHappens (int arg[]); //array
如果我要使用(初始化)上面的函数,它会是什么样子?我的答案如下。如果我错了,请纠正我。
int i = 9; int j[20] = {1,2,3,4,5};
somethingHappens(&i); //pointers
somethingHappens(&i); //address - Not really sure...
somethingHappens(j); //array
我是否缺少功能的其他重要参数?
答案 0 :(得分:3)
在第一种情况下(正如您正确提到的那样),参数通过指针传递,即参数的地址传递给方法。因此,该方法可以直接访问由指针指向的内存位置(请记住,指针也是一个变量,但它保留了一个内存地址)。
在第二种情况下,参数作为别名传递。它与第一种方法非常相似,唯一不同的是你不使用参数的内存地址来访问它的值。
在第三种情况下(有趣的是),当你传递数组变量时,它通过引用传递(在数组arr []的情况下,arr表示数组的基地址,即第0个元素的地址或& arr [0])。因此,在方法中操作数组也会反映在调用者中。
在第二种情况中,
void somethingHappens (int& a);
对此的调用应采用以下形式
somethingHappens(i);
// somethingHappens(&i); is wrong because &i means the location of i,
// while the method is expecting an alias and not an address
更多信息