void*类型强制转换结构体指针类型 您所在的位置:网站首页 指针类型转化为数值的方法 void*类型强制转换结构体指针类型

void*类型强制转换结构体指针类型

2023-09-11 11:56| 来源: 网络整理| 查看: 265

void*类型强制转换结构体指针类型

今天遇见一个自己之前不理解的地方,记录一下,教训

在使用sqlite3的时候,里面有一个回调函数,但是获取数据之后我想要把我获取的数据拿出来,找不到其他的办法。callback函数中的第一个参数就是传参的,这也是我能够想到的唯一切口了。

static int callback(void *data, int argc, char **argv, char **azColName)

但是他是void类型的,传进来结构体的地址之后,就需要注意了,需要强制类型转换,但是又不能直接转换,需要重新定义一个结构体指针,再进行强制类型转换。 还需要注意的就是结构体里面的变量不能赋初始值,默认为0。 源代码如下,大家可以去调试试试看,主要看代码:14.15.16行理解就可。

1 #include 2 #include 3 #include 4 #include 5 #include 6 7 typedef struct 8 { 9 int i; 10 } Time; 11 12 int callback(void *data, int argc, char **argv, char **azColName) 13 { 14 Time *sq_data; 15 sq_data = (Time*)data; 16 sq_data -> i = 2; 17 printf("In the callback function:i = %d\n", sq_data -> i); 18 return 0; 19 } 20 int main(int argc, char argv[]) 21 { 22 sqlite3 *db = 0; 23 sqlite3_open("temper.db", &db); 24 Time t_tmp; 25 printf("Before enter the function:i = %d\n", t_tmp.i); 26 int rc = -1; 27 char *sql_select; 28 sql_select = "select *from temper limit 1";//获取第一条数据 29 rc = sqlite3_exec(db, sql_select, callback, &t_tmp, NULL); 30 if(rc != SQLITE_OK) 31 { 32 printf("sql_select_first failure.%s\n", strerror(errno)); 33 } 34 printf("After enter the function:i = %d\n", t_tmp.i); 35 return 0; 36 }

这样里面的函数将信息传进结构体,外面的函数也可以调用啦!

在这里插入图片描述

如果有更好的方法感谢提出~



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有