C语言中二级指针的作用

 
C语言中不存在引用,所以当你试图 改变一个指针的值的时候必须使用二级指针。
 
1. 当不用指针时,参数传入子函数的过程为值传递,子函数中修改的局部变量的值对原来的实参并没有影响。
2. 当用一级指针时,参数传入子函数的过程为地址传递, 子函数的实际操作是对指针的操作,那就可以通过子函数中对于实参指针的修改达到修改实参的值的目的。
 
我们通过传递指针来达到修改一个值的目的。那么当你 需要修改一个指针的时候 呢,这个时候我们就需要指针的指针(二级指针):
 
3. 当用二级指针时,是为了修改一个指针
int fun() {
    int *p;
    int m;
    m = init1(&p);
    return m;
}
 
int init1(int **a) {
    *a = malloc(50);
    return 1;
}
fun()函数通过调用init1()函数实现给p分配内存空间的目的。
p为一个指针,&p就是指向指针p的一个指针(二级指针),
通过把&p传递给init1()函数,此时二级指针a=&p,所以说a是指向指针p的一个指针。
那么 对于*a的操作,实际上就是对于指针p的操作,达到了修改指针的目的,这样fun()就可以通过init1()函数来分配内存空间了。
  • 关于值传递

指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值