将数组传递给函数

3

如果我在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);
 }

我想知道在调用完increment_ptr之后,当我回到main函数时,arr_ptr是否仍然指向arr[0]?

2个回答

6

是的

因为你像这样调用函数:

increment_ptr(arr_ptr);

这将传递指针的副本(按值传递)。在increment_ptr中,arr_ptrmain中的arr_ptr不同,尽管两者都指向同一内存位置arr&arr[0])。从函数increment_ptr修改arr_ptr不会影响main中的arr_ptr
要从increment_ptr修改main中的arr_ptr,您需要将arr_ptr的地址传递给increment_ptr,它是一个int **(指向int的指针的指针)。

1

是的,那是正确的。函数可以修改指针所指向的内容,但不能修改指针本身,因为我们是通过值传递来进行操作的。如果你想修改arr_ptr,你需要一个指向指针的指针,就像这样:

static void set_to_null(int** arr_ptr)
{
    *arr_ptr = 0;
}

int arr[] = {1, 2, 3, 4, 5};
int* arr_ptr = arr; // arr_ptr stores address of 'arr'
set_to_null(&arr_ptr); // arr_ptr now stores 0 (null)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接