函数调用

时间:2017-01-12 17:46:24

标签: c pointers memory-address

我的main函数中有两个指针变量: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。有什么我做错了吗?

P.S
对于不发布代码,我深表歉意。这是一个任务问题,这可能会在抄袭测试中被发现。我相信这足以解释我的情况

2 个答案:

答案 0 :(得分:0)

将指针参数传递到地址以实现目标。

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);

答案 1 :(得分:0)

smallest_ptr 是指向uint_8的类型指针的变量,它拥有的值是一个地址。您创建的函数定义将最小声明为另一个此类指针。当您执行函数调用时,使用表达式的计算结果初始化最小。通常这种表达是字面变量或单变量。后者就是这里的情况。表达式 smallest_ptr 计算到某个地址,该地址由值传递给函数,即 - 被分配给最小

虽然我看不到你的函数的内部工作原理,但我认为你不是从最小读取,而是写入它。但最小是一个局部变量,其范围和生命周期与函数相关联。您写入此变量,然后结果将丢失。

您要实现的目的是操纵功能范围之外的某些数据。其中一种可能性是通过参数向函数提供该数据的地址,如下所示:

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);

哪里&amp;是地址运算符,所以我们为func()函数提供了y的地址,以便能够写入。

因为在你的情况下需要操作的变量是指向uint8_t的指针,你需要传递一个指针的地址,所以一个局部变量需要是一个指向指针的指针 - func(int ** x);