二级指针作为函数参数的作用:在函数外部定义一个指针p,在函数内给指针赋值,函数结束后对指针p生效。
一级指针:在调用函数内给指针赋值,函数结束后对指针p不生效。
eg:
note3 我们发现当p传入funs后参数p的地址变了,跟传入以前不一样了,是的参数传递是制作了一个副本,也就是funs里的p和main函数里的p不是同一个指针,但是指向的地址(b的地址)还是不变的.
通过note2和note5的输出对比我们发现*q的值没有发生改变。
因为传入的q是保存a的地址指向a,你在调用函数内部让p保存b的地址只是把 p所指的内存地址改变了,变成了b的地址,但是q指向的内存空间没有影响所以在这里并不影响函数外的指针q。
ps:因为从编译结果我们可以知道p,q的地址并不同(原因:函数参数传递是做了一个副本),你改的是p,对q无影响。
即:我们发现用一级指针,退出func函数,p的修改并不会对q造成影响。
这是运行结果,看各变量的地址变化,上面是一级指针,下面是二级指针。
二级指针:
eg:
传了指针q的地址(指针变量也是变量也有地址)
ps:把b的地址给q(原来q指向NULL,就是定义指针如:int *p=NULL,但是我做例子的时候没写进去,但大家可以当做我写进去了呗~~)
因为q的指向变了,自然*q=100,。(另**p=100)
另通过修改**p 能够改变b的值。
参考链接:一级指针与二级指针的指向与地址问题_三夭五先生的博客-CSDN博客
希望对你有帮助!