[覆辙]使用指针获取类私有变量

在封装了sqlite的接口后,使用find时,需要将所查找到的数据返回

在封装的接口中,查询结果是作为类成员的私有变量存放的

    int nrow, ncolumn;       /*! 查询结果的行列 */
    char **azResult;         /*! sqlite的查询结果表 */

 在接口中,使用了传入的指针参数来获取查询结果 

DataFind(char *filePath, int MODE, int rowAndcolumn[2], char **result);

在接口外对result进行操作即可以得到所查询的结果

但在实际运行过程中,当从result获取结果时,发生段错误

接口中的描述为

        rowAndcolumn[0] = nrow;         /*! 返回行数 */
        rowAndcolumn[1] = ncolumn;      /*! 返回列数 */
        result = azResult;              /*! 返回查找到的数据数组,第一行为字段名 */

 肉眼没有发现问题,想到在接口内将两个二维数组的地址打印出来查看 

        printf("%p\n",azResult);
        printf("%p\n", result);

得到的地址也是一样

0xa168064
0xa168064

但在接口外打印result的地址时,得到的是

(nil)

发现地址并没有被传出来

突然想到函数在传递参数时的地址问题,将传入参数改为

DataFind(char *filePath, int MODE, int rowAndcolumn[2], char ***result);

接口内更改为

        rowAndcolumn[0] = nrow;         /*! 返回行数 */
        rowAndcolumn[1] = ncolumn;      /*! 返回列数 */
        *result = azResult;              /*! 返回查找到的数据数组,第一行为字段名 */

然后再打印地址查看,发现接口内两个地址不一样

0x83be02c
0xbfccde7c

但是接口外打印的地址为

0x83be02c

与需要的结果地址一致

此时再对result进行操作获取查询结果,成功的得到数据


思考一番得到如下:

开始使用 char **result 做参数时,在函数体内改变的并不是其指针本身,而是指针内指向的位置
使用 char ***result 做参数后,相当于将指针的地址做参数传入,这时再操作改变的就是我们希望变化的指针

所以在希望将某个指针的值传出时,传入的参数必须是一个指针的指针,这样才能达到改变传入指针值的目的


暂时想到这些,不管对错,挖坑待填...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值