C语言指针的指针

出于工作需要 今天接触了一直以来很抗拒的做法 使用了指针的指针 下面直接上示例吧 有代码看起来好看些


const char    cstr_dt[]        = {'D', 'T'};
const char    ]str_sn[]        = {'S', 'N'};
const char    cstr_zi[]        = {'Z', 'I'};
const char    cstr_bp[]        = {'B', 'P'};
const char    cstr_ver[]       = {'V', 'E', 'R'};
const char    cstr_off[]       = {'O', 'F', 'F'};
const char    cstr_act[]       = {'A', 'C', 'T'};
const char    cstr_sit[]       = {'S', 'I', 'T'};
const char    cstr_lan[]       = {'L', 'A', 'N'};
const char    cstr_run[]       = {'R', 'U', 'N'};
const char    cstr_sny[]       = {'S', 'N', 'Y'};
const char    cstr_pai[]       = {'P', 'A', 'I'};
const char    cstr_sex[]       = {'S', 'E', 'X'};
const char    cstr_pace[]      = {'P', 'A', 'C', 'E'};
const char    cstr_data[]      = {'D', 'A', 'T', 'A'};
const char    cstr_upgb[]      = {'U', 'P', 'G', 'B'};


const char    *cstr_atCmd[]    = {
cstr_dt,    cstr_sn,    cstr_zi,    cstr_bp,    cstr_ver,    cstr_off,    cstr_act,    cstr_sit,    cstr_lan,    cstr_run,    cstr_sny,    cstr_pai,    cstr_sex,    cstr_pace,    cstr_data,    cstr_upgb
};

const char *g_addr0, *g_addr1;

void func_test(void){
    const char **ptr_cmdTbl = cstr_atCmd;
    unsigned char pos = 3;
    
    g_addr0 = cstr_atCmd[3];///这里存的是cstr_bp的地址
    g_addr1 = *ptr_cmdTbl + 3 * sizeof(ptr_cmdTbl);///这里会发现g_addr0 != g_addr1
    ///正确的取法是 g_addr1 = *(ptr_cmdTbl + 3);
}

下面讲解一下 其实也是我自己坑了自己 语法基础不好 没办法

按照指针的指针定义 就是 指向指针变量的指针 由于目标cstr_atCmd[]是个存放const char指针的数组,所以可以用指向char指针的指针或者是指向const char指针的指针指向它,或者讲,用指向该类型的指针来存放该数组起始地址。

那么当const char **ptr_cmdTbl = cstr_atCmd执行后,ptr_cmdTbl这个指针上存放的就是cstr_atCmd的起始地址了。而当我需要获取cstr_atCmd的起始地址时,我就应该是这样调用的ptr_cmdTbl等同于&cstr_atCmd[0],那么以此类推ptr_cmdTbl + 1即等于&cstr_atCmd[1]。

也就是指针的指针其实跟一般的指针是一样的,只是指向的数据类型是指针类型而已。并没有我原本的写法那么复杂。MARK!

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值