gpt4 book ai didi

c - 函数调用后指针未指向正确的数组元素

转载 作者:行者123 更新时间:2023-11-30 16:51:44 25 4
gpt4 key购买 nike

我的主函数中有两个指针变量:largest_ptr和smallest_ptr。任务是调用 find_max_min() 函数将两个数组(均为全局数组)中的最大和最小元素分配给各自的指针。

void find_min_max(uint8_t* a, uint8_t* b); //function declaration

uint8_t array1[] = { <some values> };
uint8_t array2[] = { <some values> };

int main(void)
{
uint8_t* largest_ptr;
uint8_t* smallest_ptr;
find_min_max(largest_ptr, smallest_ptr); //this does not assign any addresses

}

void find_min_max(uint8_t* largest, uint8_t* smallest){
//correct code to find the max/min in array1 and array2, and assign the addresses of the elements to largest and smallest
}

我尝试调试我的 find_min_max 函数,结果是正确的,即正确的值被分配给最大和最小指针。但是,当我在main()中调用该函数时,各自的地址没有分配给largest_ptr和smallest_ptr。我做错了什么吗?

附注
我很抱歉没有发布代码。这是一道作业题,可能会在抄袭测试中被发现。我相信这足以解释我的情况

最佳答案

smallest_ptr是一个指向uint_8类型的指针变量,它保存的值是一个地址。您创建的函数定义将 smallest 声明为另一个此类指针。当您执行函数调用时,您可以使用表达式的求值结果来初始化最小。通常这样的表达式是文字或单个变量。这里的情况就是后者。表达式 smallest_ptr 求值为某个地址,该地址通过值传递给函数,即 - 分配给 smallest

虽然我看不到你的函数的内部工作原理,但我假设你不是从最小读取,而是写入它。然而,smallest 是一个局部变量,其作用域和生命周期与函数相关。您写入此变量,然后结果就会丢失。

您想要实现的是在函数范围之外操作一些数据。一种可能性是通过参数向函数提供该数据的地址,声明如下:

func( TYPE* x)
{
//...
*x = VALUE; // we don't want to set local variable,
// but the variable being pointed to by it, so we dereference the local pointer
}

像这样调用:

TYPE y;
func(&y);

其中 & 是地址运算符,因此我们提供 y 的地址供 func() 函数能够写入。

由于在您的情况下需要操作的变量是指向 uint8_t 的指针,因此您需要传递指针的地址,因此局部变量需要是指向指针的指针 - func(int** x);

关于c - 函数调用后指针未指向正确的数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41619732/

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