二级指针与一级指针的一些区别

#include<iostream>

using namespace std;

 

void modifyPointer(int*);

void modifyPointer(int**);

 

int  main(){

int *pointer;

int n = 100;

pointer = &n;

modifyPointer(pointer);

cout << "调用modifyPointer(int*)" << *pointer << endl;

modifyPointer(&pointer);

cout << "调用modifyPointer(int**)" << *pointer;

 

return 0;

}

 

 

void modifyPointer(int *pointer){

int k = 1;

pointer = &k;

}

 

void modifyPointer(int **pointer){

int k = 1;

*pointer = &k;

}

/**

1、将指针 pointer 作为参数传递给函数 modifyPointer(int* pointer) 时,实际传递的是指针的值(&n),而不是指针本身(&pointer)

---->函数 modifyPointer(int* pointer)也会新建一个int *pointer 的局部变量,来接收 &n(即是 int *pointer;pointer = &n;的简写)

所以在 modifyPointer(int* pointer) 中修改 pointer (pointer = &k;)时修改的是局部的 pointer,而不是从 main 函数传递过来的

全局pointer,所以不会影响 main 函数中的 pointer

2、将指针 pointer 作为参数传递给函数 modifyPointer(int** pointer) 时,实际传递的值是(&pointer),函数modifyPointer(int** pointer)

会新建一个 int **pointer(局部) 的局部变量来接收 &pointer(全局)(即是 int **pointer(局部);pointer(局部) = &pointer(全局)

,-----此时,pointer(局部) == &pointer(全局);*pointer(局部) == pointer(全局) == &n;**pointer(局部) == *pointer(全局)== n

当执行 *pointer = &k时,实际执行的是 pointer(全局) = &k;所以此时修改局部的 pointer 也修改了 main 函数传递过来的全局的 pointer,

*/

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值