指针与函数
来源:互联网 发布:淘宝店铺分类在哪里 编辑:程序博客网 时间:2024/05/17 06:46
昨晚睡前突发奇想,就拿了指和笔,画了一堆乱七八糟的格子,
画风大致如下
以上图是如下代码的内存模拟图
void change(int **a, int **b);
int main(){int a = 1;int b = 2;int *pta = &a;int **ptaa = &pta;int *ptb = &b;int **ptbb = &ptb;printf("address a:%p address b:%p\n",&a,&b);change(ptaa,ptbb);printf("address pta:%p address ptb:%p\n",pta,ptb); printf("value a:%d value b:%d\n",a,b);return 0;}void change(int **a, int **b){int temp1;int *temp = *a;*a = *b;*b = temp;temp1 = **a;**a = **b;**b = temp1;}如上所示,代码的意图是使用change函数把主函数中的a,b值对换,
在非主函数中,如果不使用指针,是无法对主函数变量进行改变的,
其实这个问题用一级指针解决很快很简单就可以解决
为了加深对指针的理解,所以写了一个二级指针.
通过内存模拟图和代码,可以看出,指针变量pta存储的是变量a的地址,
指针变量ptb存储的是变量b的地址,指向指针的指针变量ptaa存储的是指针变量pta,
指向指针的指针变量ptbb存储的是指针变量ptb的地址.
好了下面来分析一下如何把主函数中a,b的值互换.
首先,我们需要给change函数传过去两个二级指针的值.
在change函数中,我们创建了一个两个临时变量,一个临时指针变量temp,一个临时变量temp1;
分别用于更改两个一级指针中的地址和更改地址对应的值.
下面是图解分析
change函数中首次更改的是pta和ptb中存储的地址,
对二级指针解引用,得到了pta和ptb中存储的地址,然后交换.
交换后的内存模拟图如下
然后,现在要改a,b中的值,则是一样的,对一级指针再次解引用,
再交换它的值.
到此,函数运行完毕.
阅读全文
0 0
- 指针函数与函数指针
- 指针函数与函数指针
- 函数指针与指针函数
- 指针函数与函数指针
- 函数指针与指针函数
- 函数指针与指针函数
- 函数指针与指针函数
- 函数指针与指针函数
- 函数指针 与 指针函数
- 函数指针与指针函数
- 函数指针与指针函数
- 函数指针与指针函数
- 函数指针与指针函数
- 函数指针与指针函数
- 函数指针与指针函数
- 函数指针与指针函数
- 函数指针与指针函数
- 指针函数与函数指针
- Android------底部导航栏BottomNavigationBar
- 北斗链张蕾:以太坊的智能合约并不是唯一的选择
- HTTP中404、405、500等请求错误出错原因
- git 基础命令操作
- &,&&,|,||详解
- 指针与函数
- Ajax
- SkipList时间复杂度分析O(log n)
- 深度学习四个明显的缺点
- 在广告LR模型中,为什么要做特征组合?
- ASP.net泛型list常用操作
- 为梦想加油
- Java进阶之路——从初级程序员到架构师,从小工到专家
- Ubuntu16.04 安装PHP7 的 imagick 扩展 踩坑过程