我正在学习变量是如何通过值传递给函数的,而数组是如何通过引用传递的。
我运行了我的脚本来验证,但是指针地址不同。为什么呢?
void arrayFunction(int array[4]);
int main(void){
int foo[4] = {0, 1, 2, 3};
printf("This is the address to foo in main: %p\n",&foo);
arrayFunction(foo);
}
void arrayFunction(int array[4]){
printf("This is the address to array in method: %p\n", &array);
array[0] = 22;
}
3条答案
按热度按时间rjee0c151#
这是
foo
的地址,也就是&foo[0]
概念上被复制到一个新变量,或者换句话说,指针仍然是通过值传递的。p8ekf7hl2#
&array
是数组变量在被调用函数堆栈中的地址,但是它被实现为指向相同数组元素的指针。下面是您的程序的修改版本,显示:
t30tvxxf3#
数组和普通元素之间有一个细微的区别。如果声明了arr[10],那么只有(arr)给出了第一个元素的地址。在你的代码中,你有指向第一个元素'& arr'的指针的打印地址。只要去掉'&',两者就会显示相同的地址。