函数参数是二级指针的问题

时间:2022-01-16 15:11:42

实际应用中再一次遇到了函数参数是二级指针的问题,如下是正确的版本

void main(void)
{
    //一级指针
    uint8     *value_data_string = NULL;
    fun_change(&value_data_string );
    printf((char *)value_data_string );
    fun_free(&value_data_string );    
}

void fun_change(uint8 **tem_buf)
{
    int value_len = 5;
    *tem_buf = (uint8 *)malloc(value_len);
    strncpy(*tem_buf, "12345", 5);
printf(tem_buf); }
void fun_free(uint8 **tem_buf) { free(*tem_buf); }

如下是错误的版本,在于一级指针只能改变其指向的内容,而不能改变其本身的值,所以在fun_change里面给tem_buf赋值,形参改变,实参不改变。

void main(void)
{
    //一级指针
    uint8     *value_data_string = NULL;
    fun_change(value_data_string );
    printf((char *)value_data_string );
    fun_free(value_data_string );    
}

void fun_change(uint8 *tem_buf)
{
    int value_len = 5;
    tem_buf= (uint8 *)malloc(value_len);
    strncpy(tem_buf, "12345", 5);
printf(tem_buf); }
void fun_free(uint8 *tem_buf) { free(tem_buf); }