如果我在C中有以下内容:
void increment_ptr(int *arr_ptr)
{
int i;
for(i=0; i<10; i++)
{
arr_ptr++;
}
}
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int *arr_ptr = arr;
increment_ptr(arr_ptr);
}
我是否正确地认为,当我在致电main
后返回increment_ptr
时,arr_ptr
仍然指向arr[0]
?
答案 0 :(得分:6)
是强>
因为您调用了这样的函数:
increment_ptr(arr_ptr);
这会传递指针的副本(按值传递)。 arr_ptr
中的increment_ptr
与arr_ptr
中的main
不同,但两者都指向相同的内存位置arr
(&arr[0]
)。修改功能arr_ptr
中的increment_ptr
不会影响arr_ptr
中的main
。
要从arr_ptr
修改main
中的increment_ptr
,您需要将arr_ptr
的地址传递给increment_ptr
int**
(指向int
)指针的指针