struct ifaddrs **ifap; struct ifaddrs *ifa; int n; n = getifaddrs(&ifa); *ifap = ifa; for (ifa; ifa!= NULL; ifa = ifa->ifa_next) { 对地址链表的处理函数 }
调用双重指针ifap,指向ifa;单重指针ifa,指向地址链表。
在for循环中使用ifa进行遍历,遍历结束后,ifa指向null。但是ifap仍然指向地址链表头结点。
因为在语句
*ifap = ifa;之后,*ifap并不是一个地址,而是一个变量。*ifap作为变量,存储着ifa当时的地址的值(如0x05f0)。之后ifa进行遍历时,*ifap作为一个变量,不发生变化。