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函数。