说透一级指针和二级指以及(void**)&在双链表中的应用


因为函数参数是按值传递的,所以要想改变变量,必须传递地址

二级指针实际上就是指针变量的地址,如果传递二级指针,函数声明必须写**

(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);
}<
  • 5
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值