2020博客之星年度总评选进行中:请为74号的狗子投上宝贵的一票! 我的投票地址:
文章目录
- 一.前言
- 二.正文
- 1. int类型做函数参数
- 2.一级指针做参数
- 3. 二级指针做参数
- 4. 总结
一.前言
先来看一段代码:
int * p = NULL;
void func(int *p)
{
int * p_y = new int[10];
p = p_y;
}
大家认为这段代码是否能达到预期效果?留个坑,最后说。
以前就遇到函数参数是指针,想要修改指针,结果总是不理想,前几天群里也是有萌新问到这个问题,刚好我当时在书上看到怎么一句话:函数参数是按值传递和按引用传递,瞬间就顿悟了这个问题。
指针作形参,需要注意的问题 这是以前发现问题时写的,只写了解决方法,并没有说明其中原因,其实是当时还是不知原因的,俗话说:知其然,知其所以然,刚好顿悟了这个原因,就记录一下下吧,文章想到最后,感觉做一个图比较有意思,第一次作图,只是想尽力表达,嘿嘿。从小语文就不好,勿怪。

什么时候使用二级指针,这个是针对按值传递来说的,所以按引用传递,我们不说。想要理解什么时候使用二级指针,就要理解按值传递,按值传递是理解何时使用何种指针做参数的精髓。
二.正文
1. int类型做函数参数
void func_1(int a)
{
a = 10;
}
int a = 1;
func_1(a);
cout<< a ;
a会输出什么?这是一个老生常谈的问题了,学习函数参数的时候,交换两个数是必学的案例,答案就是传入指针才能修改,为什么呢?想要知道答案要了解函数在内部做了什么:
第一,函数自己创建了一个临时变量。
第二,将函数传进来的值赋值给临时变量,所以我们修改函数里所谓的a只是一个临时变量,并不是修改的函数外的a。

void func_1(int a)
{
a = 10;
}
接下来,来看一级指针做参数
2.一级指针做参数
void func_2(int * a)
{
*a = 10;
}
int a = 1;
func_2(&a);

重点来了
void func_2(int * a)
{
a=NULL;
}
int a = 10;
int *b = &a;
func_2(b);

3. 二级指针做参数
然后一级指针的大哥,二级指针来了说句:你不行,看我操作,于是接手了一级指针。
void func_3(int ** a)
{
**a
}
int a = 10;
int *b = &a;
int ** c = &b;
func_3(c);

4. 总结
代码所述,总结下来就两句话:
1.如果想要修改指针指向变量的值,则无需传入高一级的指针,使用同级指针即可。
2.如果想要修改指针本身的值,也就是地址,则应使用比原指针高一级的指针来实现。
3.图片所述,除了想要表达文章意思之外,也表达出了某种规则,需要我们自身强大呀。
4.所以文章开头的代码无法实现预期效果,因为它想修改自身。
(编辑:北几岛)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|