小议指针(一)
来源:互联网 发布:java和php哪个简单 编辑:程序博客网 时间:2024/05/18 01:21
这几天自学B树,感觉到原来悬而未决的指针问题又暴露出来了,回想起当初做平衡二叉树时,曾为指针的问题困扰好久,到CSDN上请教了下指针与引用,看后似懂非懂,不曾想到今日又遇此问题:
1.指针与引用
C++引入了参数引用机制,从而在一定程度上避免了对指针过多的纠缠,不过引用的机制掩盖了初学者对于指针的迷茫,但是这对真正想做技术来说不一定是好事。
下面是C++的一个引用调用:
void f(int ¶meter )
{
parameter =3;
}
int main()
{
int a=0;
f(a);
printf("%d",a);
...... //代码略
}
最后打印出来的是3,而不是0,这就是C++引用调用的用处,在主函数定义的一个变量,如若我们需要在函数体内对它进行更改,我们就用引用调用,这样在函数体内对于parameter的操作我们就可以理解为是直接对主函数变量a的操作了。如果我们不采用引用调用的话,实际上的内存中的操作如下图所示:
当主函数的变量传入到调用函数中时,调用函数将会“拷贝”出一个a的副本来,这样我们直接在调用函数中的操作,实际上是对拷贝的一份操作,比如parameter=3 只是对另一个"a"进行操作,实际上在主函数的a根本没有任何改变,这也就是我们教科书上花很大篇幅教导我们那个Swap(int a,int b)不成功的原因。
但是在C中,我们没有调用引用的概念,不过借助于指针,我们完全可以模拟出引用调用的操作。那么在纯C中,我们只需要按照这个思路来写出
a是主函数定义的一个变量,我们通过把它的地址传给函数体内定义的指针,使指针指向该地址,那么通过改变函数体指针的值,我们就可以改变主函数的值了。
void f(int *p)
{
*p=3;
}
void main()
{
int a=2;
f(&a);
}
注意上面的f(&a),表示把地址传给函数体内的指针,那么指针就是指向了主函数的变量a所在内存,改变p实质就改变了a的值了,通过这种办法我们就解决C++的引用在C中实现的问题了。
- 小议指针(一)
- 指针小议
- 小议指针(二)
- 小议函数指针
- 小议指向指针的指针
- 小议指针(转自刺猬小屋)
- 小议如何改变指针的指向
- 小议如何改变指针的指向
- 小议如何改变指针的指向
- 小议C语言中的数组和指针
- 面向对象与面向组件小议(一)
- 面向对象与面向组件小议(一)
- 转载:面向对象与面向组件小议 (一)
- 小议Oracle外键约束修改行为(一)
- 小议和浅谈 《龙族》的经典设计(一)
- 指针 一
- 指针(一)
- 指针一
- 突破SQL注入限制的一点想法
- 创建表格
- 孙菲菲倾情献映视觉大片——美女与“悍马H6”
- 利用底层键盘钩子屏蔽任意按键
- cookies子键的使用
- 小议指针(一)
- VSS+Vs2003使用手册
- java将WORD文档转换成pdf文件
- 我们学校一牛老师的语录
- 关于 防火墙的断口探测
- [AD]商业价值被发现,国内博客们的两件喜事
- 常用的60招电脑操作精典小窍门
- 给身体排毒的时间
- 分隔字符串