C指向结构中数组的指针传递给函数

标签 c arrays pointers

我正在尝试将指向数组的指针传递到结构内部的回调函数中以进行 sqlite3 操作。不幸的是,基于我对指针的理解(显然遗漏了一些东西)的逻辑不起作用。

简化了,这就是我所拥有的:

    typedef struct sqlCallbackData
    {
        int16_t data_array[128][32];

        // There are other members here too...

    } SqlCallbackData_t;

    //===========================================================================================================
    //===========================================================================================================

    void sql_getData(uint8_t seq_num, uint8_t seq_bank, int16_t *data, char *name)
    {
        // 'data' above will be a pointer to a 2D array

        //...

        // Initialise struct members to be passed into callback...
        SqlCallbackData_t paramStruct;

        //Thows: error: incompatible types when assigning to type 'int16_t[128][32]' from type 'int16_t *'
        paramStruct.data_array = data;// I know this isn't right...

        //...

        // Pointer to paramStruct passed into void pointer in callback...
        if (sqlite3_exec(dbPtr, sql, callback, &paramStruct, &zErrMsg) != SQLITE_OK)
        {
            fprintf (stderr, "SQL error: %s\r\n", zErrMsg);
            sqlite3_free(zErrMsg);
        }

        //...
    }

    //===========================================================================================================
    //===========================================================================================================
    // Callback function

    static int load_callback(void *paramStruct, int argc, char **argv, char **azColName)
    {
        int i;

        uint8_t value;

        //...

        // Just making the syntax below a bit mroe readable, as I access members a fair bit in this function
        SqlCallbackData_t *params = ((SqlCallbackData_t *)paramStruct);

        //...
        // Data retreived from sql database...

        params->data_array[0][0] = value;// <- What I'm trying to acheive...obviosuly not correct

        return 0;
    }

所以我知道指向数组的指针是如何传递给函数的(解释为 here ),但是我对如何将这个指向数组的指针分配给结构、传递给函数(然后再次作为数组访问)。

绕圈子,所以任何帮助将不胜感激:)

最佳答案

I am trying to pass a pointer to an array, inside a structure

为此你需要像这样改变结构,看看two dimensional array pointer

typedef struct sqlCallbackData
{
     int16_t (*data_array)[32]; //2d array pointer

    // There are other members here too...

} SqlCallbackData_t;

当您将地址分配给指针时...

void sql_getData(uint8_t seq_num, uint8_t seq_bank, int16_t (*data)[32], char *name)
    {
        // 'data' above will be a pointer to a 2D array
        // Initialise struct members to be passed into callback...
        SqlCallbackData_t paramStruct;

        paramStruct.data_array = data;

关于C指向结构中数组的指针传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37879685/

相关文章:

c - "Semantic issue: Implicitly declaring library function ' malloc ' with type ' void *(无符号长)'"

c++ - 将指针转换为shared_ptr

c++ - 让子窗口继承父背景颜色?

C - 尝试使用 scanf/getchar 从 stdin 读取单个字符(失败)

php - 如何获取包含特定子字符串的数组的键?

php - 我如何比较两个数组并将唯一记录添加到表中

C函数输入以某种方式在地址中占用相同的内存

c - K&R 练习 1-19 意外且不一致的输出

c++ - 哪个更具可读性 (C++ = )

java - 银行账户计划。空指针异常错误