将指针传递给函数回调

时间:2018-06-07 10:06:09

标签: callback double-pointer

我想将数组传递给回调函数,但我总是得到call_print()的零(有时是垃圾字符)。 我的代码在下面的两个单独的文件中,我喜欢这样保留它。

file1.c中

#include <myheader.h>

uint8_t dummy[6] = {0x30, 0x30, 0x31, 0x31, 0x32, 0x32};

void dcallback(uint8_t **outputBuff)

int main(void)
{
    slave(dcallback);
}

void dcallback(uint8_t **outputBuff)
{ 
    *outputBuff = dummy;
}

file2.c中

#include <myheader.h>

static void (*data_callback)(uint8_t **output_buffer);

uint8_t **output_buffer;

void slave(void (*data_callback_in)(uint8_t **output_buffer))
{
    int i;

    data_callback = data_callback_in;
    data_callback(output_buffer);

    for(i=0 ; i<6 ; i++)
    {
        call_print( **(output_buffer + i));
    }
}

当我修改代码时,如下所示,我得到'0 1 2 3 4 5'。这似乎是正确的结果,但这不是我想要的。我想传递一个数组,以便我可以轻松地将指针指向另一个数组。 我以为我在使用指针时犯了错误。

file1.c中

#include <myheader.h>

uint8_t dummy[6] = {0x30, 0x30, 0x31, 0x31, 0x32, 0x32};

void dcallback(uint8_t *outputBuff)

int main(void)
{
    slave(dcallback);
}

void dcallback(uint8_t *outputBuff)
{ 
    int x;

    for(x=0 ; x<6 ; x++)
    {
        *outputBuff = x;
    }
}

file2.c中

#include <myheader.h>

static void (*data_callback)(uint8_t *output_buffer);

uint8_t output_buffer[6];

void slave(void (*data_callback_in)(uint8_t *output_buffer))
{
    int i;

    data_callback = data_callback_in;
    data_callback(output_buffer);

    for(i=0 ; i<6 ; i++)
    {
        call_print(output_buffer[i]);
    }
}

有人,你能否发现我弄错了? 我应该如何正确传递'虚拟'数组?

先谢谢。

1 个答案:

答案 0 :(得分:0)

尝试制作uint8_t **output_buffer;  作为单个指针uint8_t *output_buffer;

并且在从slave方法调用回调时,您需要调用如下所示。

data_callback(&output_buffer);

这是完整的代码。

#include<stdio.h>
#include<stdint.h>

uint8_t dummy[6] = {0x30, 0x30, 0x31, 0x31, 0x32, 0x32};

static void (*data_callback)(uint8_t **output_buffer);

uint8_t *output_buffer;
void dcallback(uint8_t **outputBuff);

int main(void)
{
    slave(dcallback);
}

void dcallback(uint8_t **outputBuff)
{
    *outputBuff = dummy;
}



void slave(void (*data_callback_in)(uint8_t **output_buffer))
{
    int i;

    data_callback = data_callback_in;
    data_callback(&output_buffer);

    for(i=0 ; i<6 ; i++)
    {
        printf("%d\n", *(output_buffer + i));
    }
}