因为函数参数是按值传递的,所以要想改变变量,必须传递地址。
二级指针实际上就是指针变量的地址,如果传递二级指针,函数声明必须写**。
(void**)&必须是本质上就是指针变量的地址才可以做这样的转换,并不是说把一个一级指针也可以转换,void**的本质是标识一个二级指针。
&data就是(默认数据类型 **)&data,(void **)&data和&data还是同一块内存,只不过数据类型发生变化了。
如果默认数据类型是int,&data就是(int **)&data
一级指针:
void
swap ( int *a, int *b ){
int temp = 0;
temp = *a;
*a = *b;
*b = temp;
}
int
main ( int argc, char **argv ){
int a,b;
a = 16;
b = 32;
swap(&a, &b);
return ( a - b );
}
二级指针:
void swap(int **a, int **b)
{
int t;
t =**a;
**a =**b;
**b=t;
}
int main()
{
int i = 3;
int j = 5;
int *p = &i;
int *q = &j;
swap(&p, &q);
}
高级一点使用void**只是为了通用,可以交换各种类型。
void swap(void **a, void **b)
{
void *t;
t =*a;
*a =*b;
*b=t;
}
int main()
{
int i = 3;
int j = 5;
int *p = &i;
int *q = &j;
char *s1="abc";
char *s2="def";
swap((void**)&p, (void**)&q);
swap((void**)&s1, (void**)&s2);
}

本文详细解释了一级指针、二级指针的概念,特别是(void**)&在双链表操作中的作用。通过例子展示了如何在函数中传递指针地址以改变变量,强调了(void**)&本质是二级指针的地址,并提醒读者在使用双链表删除节点时需要注意内存管理,包括何时释放资源。
最低0.47元/天 解锁文章
5万+

被折叠的 条评论
为什么被折叠?



