功能参数

时间:2012-10-18 04:48:01

标签: c++ function parameters

函数的一些重要参数是指针,地址和数组。

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

我是否缺少功能的其他重要参数?

1 个答案:

答案 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


更多信息