细说指针

59 篇文章 1 订阅
21 篇文章 0 订阅

因为在工作中踩到了指针相关的坑,所以在这里记录下来问题产生的原因,以免再次遇到同样的错误。如果你对文章中的观点、内容存在不一样的看法,欢迎通过关于博主页面中的Email与我联系。

需求:

将代码提取成函数,代码如下:


mr_cfg_bsc_info_t *mir_list = NULL;

mir_list在主函数中是一级指针的形式,我提取函数时接口用了二级指针如下格式:

int32_t mirror_suspend_flag_abnormal_handle(mr_cfg_bsc_info_t *mir_info,lun_info_t *lun_info,uint32_t mir_num,mr_cfg_bsc_info_t **mir_list)

复制原有的代码:

found_rmt_cfg = FALSE;

for (rmt_cfg_idx = 0; rmt_cfg_idx < mir_num; rmt_cfg_idx++)

{

rmt_cfg = &mir_list[rmt_cfg_idx];

if(0 == memcmp(&mir_info->remote_uuid, &rmt_cfg->local_uuid, sizeof(uuid_t)))

{

found_rmt_cfg = TRUE;

break;

}

}


将rmt_cfg = &mir_list[rmt_cfg_idx];修改成rmt_cfg = mir_list[rmt_cfg_idx];

我自以为自己简化了代码,使函数主题看起来更清晰,却哪知道埋下了一个定时炸弹.


要分析上述问题,我们先从最基本的指针知识说起.

指针数组与数组指针

指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针


数组指针:a pointer to an array,即指向数组的指针


还要注意的是他们用法的区别,下面举例说明。


int* a[4] 指针数组 表示:数组a中的元素都为int型指针

元素表示:*a[i] *(a[i])是一样的,因为[]优先级高于*


int (*a)[4] 数组指针 表示:指向数组a的指针

元素表示:(*a)[i]


/*

Name: 指针数组与数组指针

Copyright: 52coder.net

Author: 52coder

Date: 03/06/17 17:24

Description: pointer

*/



#include <stdio.h>

#include <stdlib.h>



int main()

{

//定义指针数组,数组的每一个元素都是指向int的指针

int *a[10];

int i = 0;

int var = 10;

a[0] = &var;

//这里*a[0]与*(a[0])相同,原因是[]优先级高于*

printf("%d\n",*a[0]);

printf("%d\n",*(a[0]));

//定义数组指针

int arr[10]={0,1,2,3,4,5,6,7,8,9};

int (*b)[10];

b=&arr;

for(i=0;i<10;i++)

{

printf("%d ",(*b)[i]);//此处必须使用(),原因是先解引用,然后索引.

}

return 0;

}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值