指针做函数入口参数,这里就相当于形参跟实参的问题(局部变量,全局变量),
typedef struct
{
uint8_t *pSendBuf[10];//申请空间用,指针数组
}Ram_t;
Ram_t testp_t;
uint8_t bufData[20]={0};
static uint8_t* newRam_p(uint8_t *p,uint8_t *data,uint16_t len)
{
//这里输入的指针是未赋值的空指针,所以申请的空间只能给p(此时的P并没有实例,因为传入的指针本就是空,这里相当于局部指针变量了)
p=(uint8_t*)malloc(len*sizeof(uint8_t));
memcpy(p,data,len);
*pLen=len;
return p;//若通过返回所申请的空间,是可以把此临时指针P给带出去的,但是例程中,testp_t->pBuf[0]本身为空指针,所以无法得到申请的地址。
}
static int16_t newRam_pt(Ram_t *pt,uint8_t *data,uint16_t len)
{
//这里的pt是全部变量,所以是存在实例的,pt表示的就是入口参数所传入的全局变量的地址,
pt->pBuf[0]=(uint8_t*)malloc(len*sizeof(uint8_t));//举例用buf[0],这里是赋值给实例结构体中的某个指针指定的空间,可以成立
if(pt->pBuf[0] == NULL)
return FULL_ERR;
memcpy(pt->pBuf[0],data,len);
return NONE_ERR;
}
void main()
{
//这里传入的testp_t->pBuf[0]虽然是全局变量,但是到了函数内部此指针并 未能找到,
newRam_p(testp_t->pBuf[0],bufData,10);
//这里传入的testp_t是全局变量,需要赋值的指针在其内部,属于一个变量,在函数内部可以根据实例找到
newRam_pt(&testp_t,data,10);
}