0

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

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

我是否缺少任何其他重要的函数参数?

4

1 回答 1

3

在第一种情况下(正如您正确提到的),参数通过指针传递,即参数的地址传递给方法。因此,该方法可以直接访问指针指向的内存位置(请记住,指针也是一个变量,但它持有一个内存地址)。

在第二种情况下,参数作为别名传递。它与第一种方法非常相似,唯一不同的是你没有使用参数的内存地址来访问它的值。

在第三种情况下(有趣的是),当您传递数组变量时,它是通过引用传递的(在数组 arr[] 的情况下,arr 表示数组的基地址,即第零个元素的地址或 &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


更多信息

于 2012-10-18T05:08:00.267 回答