![](/img/trans.png)
[英]Pointer to root node of B-tree after call to a function begins pointing to a child ( should continue pointing to root instead )
[英]Pointer not pointing to the correct array element after function call
我的主要功能中有两个指针变量: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。 我做错了什么吗?
聚苯乙烯
对于未发布代码,我深表歉意。 这是一个作业问题,可能会在窃测试中被发现。 我相信这足以解释我的情况
通过它们的地址传递您的指针参数,以实现您的目标。
void find_min_max(uint8_t** a, uint8_t** b);
find_min_max(&largest_ptr, &smallest_ptr);
代替
void find_min_max(uint8_t* a, uint8_t* b);
smallest_ptr是类型指针的变量uint_8,并且它包含一个值是一个地址。 您创建的函数定义将最小声明为另一个此类指针。 当执行函数调用时,将使用表达式的计算结果初始化最小的函数。 通常,此类表达式是文字或单个变量。 后者就是这种情况。 表达式minimum_ptr求值到某个地址,该地址通过值传递给函数,即-分配给minimum 。
尽管我看不到函数的内部工作原理,但我假设您不是从small读取,而是向其写入。 但是最小的是局部变量,其范围和生存期与该函数相关。 您写入此变量,然后结果将丢失。
您想要实现的是在功能范围之外操作某些数据。 一种可能是通过这样声明的参数将数据的地址提供给函数:
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.