cpp一重和二重指针作函数参数的使用

⌚Time: 2025-02-04 22:52:00

👨‍💻Author: Jack Ge

cpp向函数传递一重指针的目的是让函数能够修改指针指向的内容

#include<iostream>
void fun(int *p){
    *p = 3;
}
int main(){
    int a = 0;
    int *p = &a;
    fun(p);
    std::cout<<a<<std::endl;//打印3
    return 0;
}

二重指针的目的是让函数能够修改指针变量本身,结果是指针指向的地址会改变。可以举例子说明。

#include<iostream>

char errorText[][1024] = {"no internet","no disk space","time out"};

void fun(char **p,int errid){
    *p = errorText[errid];
}

int main(){
        char *msg;
    fun(&msg,1);//获取错误码1对应的信息
    std::cout<<msg<<std::endl;
    fun(&msg,0);//获取错误码0对应的信息
    std::cout<<msg<<std::endl;
    return 0;
}

这个例子使用一个字符串数组errorText储存了预设的错误码对应的解释文本。函数fun的参数是二重指针和一个错误码。根据错误码设置了指针*p的值,等于errorText的特定字符串的位置,也就是使形参msg指向了errorText的特定位置。之后打印p就是不同错误代码对应的错误信息文本。

运行结果

no disk space
no internet

在gtk2中很多函数传递的是二重指针。需要注意传递的指针不需要分配空间,通常在使用后需要用g_free释放。比如gtk_tree_model_get函数。

//字符串指针
gchar *filePath;
gchar *color;
//传递二重指针给函数
gtk_tree_model_get(model,&iter,0,&filePath,1,&color,-1);
//释放空间
g_free(filePath);
g_free(color);