【c语言】指针的指针使用方法

66 篇文章 4 订阅
23 篇文章 1 订阅

指针的指针一般用法是外部人申明,传入另一个函数以后由这个函数申请空间,但是需要注意的是,要在传入之前给这个指针的指针初始化。

例如


#include<stdio.h>

typedef unsigned char u8;
typedef unsigned short u16;
typedef unsigned int u32;
typedef struct
{
	u16 value_handle;
	u8 offset;
	u8 *data;
	u16 len;
} ble_gatts_write_t;

typedef struct
{
	u16 value_handle;
	u8 offset;
	u8 **data;
	u16 *len;
} ble_gatts_read_t;
typedef struct ble_gatts_evt_param{
	u16 conn_handle;
	union
	{
		ble_gatts_write_t write;
		ble_gatts_read_t read;
	};
}ble_gatts_evt_param_t;


void ble_cae_gatts_callback(ble_gatts_evt_param_t *param){
	printf("ble_cae_gatts_callback enter\n");
	u8 *read_data = NULL;
	u16 read_data_len = 3;
	read_data = (u8 *)malloc(3);
	if(NULL == read_data){
		printf("11111111111111111111111");
		return ;
	}
	printf("ble_cae_gatts_callback 1\n");
	read_data[0] = 0x32;
	read_data[1] = 0xff;
	read_data[2] = 0x00; 
	printf("ble_cae_gatts_callback 2\n");
	*param->read.data = read_data;
	printf("ble_cae_gatts_callback 3\n");
	*param->read.len = read_data_len;
	printf("read_data_len %d\n",read_data_len);
	printf("ble_cae_gatts_callback dump\n");
}
void test_printf5(u8 *str,u32 length)
{
	int iii;
	printf("the str is:");
	for(iii= 0;iii <length;iii++)
	{
		printf("%02x ",str[iii]);
	}
	printf("\n");
}
int main()
{
	ble_gatts_evt_param_t param = {0};
	printf("444444444444\n");
	u8 *data = NULL;
	u32 len3= 0;
	
	param.conn_handle = 0x50;
	param.read.offset = 0;
	param.read.value_handle = 0x1a;
	
	param.read.data = &data;
	param.read.len = &len3;
	
	ble_cae_gatts_callback(&param);
	test_printf5(*param.read.data,*param.read.len);
    free(*param.read.data);
	return 0;
}

如果屏蔽和不屏蔽这两行会是不同的结果,有兴趣的可以试试。

    param.read.data = &data;
    param.read.len = &len3;

记得释放内存的时候需要先释放内部的指针空间,然后再释放外部的。要不然会出现内存泄漏

free(*param.read.data)和free(data)是同一个道理

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值