gpt4 book ai didi

使用指针更改不同函数中的变量

转载 作者:太空狗 更新时间:2023-10-29 16:12:07 24 4
gpt4 key购买 nike

我有一些 C 代码,不允许更改结构。我的主函数中有一个名为 arr 的数组:

int arr[4] = {1,2,3,4}

我必须在另一个函数中更改此数组的值。在 main 函数中使用以下方法调用:

change_array(arr);

change_array 方法是在另一个.c 文件中实现的。我只能在 change_array 函数内进行更改。

void change_array(void *the_array)
{

}

在这个函数中,我想改变 arr 的值。我发现我可以使用以下方法获取数组的第一个值:

int first_value = *(int*)the_array;

我可以使用以下方法获取第一个值的位置:

int location = the_array;

我试图通过以下方式更改值:

*the_array = 1;

但这并没有解决我的问题。有什么想法吗?

最佳答案

您可以在 change_array() 函数中创建一个 int 指针并通过它修改值,如下所示。这是有效的,因为您传递的指针只是数组中第一个元素的内存地址。因此,通过将另一个指针(适当类型)分配给同一位置,您可以直接修改原始值。也就是说,您在函数中对该内存位置所做的任何更改也会更改原始数组,因为它们在内存中占据相同的位置。

正如其他人所指出的,您将无法知道他们传递给您的数组的大小。您提到无法更改调用代码,所以我认为这不适合您。假设您的函数只会以固定大小调用是脆弱的,但它应该仍然适合您。

#include "stdio.h"

void change_array( void * the_array );

int main()
{
int arr[ 4 ] = { 1, 2, 3, 4 };

printf( "Before:\n%d | %d | %d | %d\n", arr[ 0 ], arr[ 1 ], arr[ 2 ], arr[ 3 ] );
change_array( arr );
printf( "After:\n%d | %d | %d | %d\n", arr[ 0 ], arr[ 1 ], arr[ 2 ], arr[ 3 ] );

return( 0 );
}

void change_array( void * the_array )
{
int * arr_ptr = the_array; //NOTE: This is implicitly converting the void * to an int *
printf( "In the changing function:\n%d | %d | %d | %d\n", arr_ptr[ 0 ], arr_ptr[ 1 ], arr_ptr[ 2 ], arr_ptr[ 3 ] );
arr_ptr[ 0 ] = 5;
arr_ptr[ 1 ] = 6;
arr_ptr[ 2 ] = 7;
arr_ptr[ 3 ] = 8;
}

您可以在此处查看实际效果:http://codepad.org/6PXBeZlY

关于使用指针更改不同函数中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26594193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com