为什么会用到二重指针?
第一种情况:
指针的数组,比如字符串的数组
int *strs[2];strs[0] = "hello";strs[1] = "world";
第二种情况:
需要引用语义。C++ 里面有引用参数,用 & 标识,C里面没有,可以用这个实现:
/* 对 a 和 b 做加法,结果存放在 c 里面 */// C++ 实现void add(int a, int b, int &c) {c = a + b;}// C 实现void add(int a, int b, int *c) {*c = a + b;}
如何理解二重指针
首先应该明确一个点:只有变量才有地址,字面量没有地址
int a;int * addr_a = &a; // 可以int ** a_a_a_1 = &a; // 可以!可以对变量取地址int ** a_a_a_2 = &(&a); // 不可以!无法对一个字面量取地址!
二重指针有点难以理解,可以利用黑盒思维。比如这段代码:
void foo(char *buf, char **hdr){*hdr = buf;}
直接看的话很容易迷惑,利用黑盒思维,将某一部分的类型看作一个整体:
typedef char *str_t;void foo(str_t buf, str_t *hdr){*hdr = buf;}
这样子就很容易懂了。
