指针的指针一般用法是外部人申明,传入另一个函数以后由这个函数申请空间,但是需要注意的是,要在传入之前给这个指针的指针初始化。
例如
#includetypedef 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 entern"); 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 1n"); read_data[0] = 0x32; read_data[1] = 0xff; read_data[2] = 0x00; printf("ble_cae_gatts_callback 2n"); *param->read.data = read_data; printf("ble_cae_gatts_callback 3n"); *param->read.len = read_data_len; printf("read_data_len %dn",read_data_len); printf("ble_cae_gatts_callback dumpn"); } void test_printf5(u8 *str,u32 length) { int iii; printf("the str is:"); for(iii= 0;iii 如果屏蔽和不屏蔽这两行会是不同的结果,有兴趣的可以试试。
param.read.data = &data;
param.read.len = &len3;记得释放内存的时候需要先释放内部的指针空间,然后再释放外部的。要不然会出现内存泄漏



