小议指针(一)

原创 2007年10月14日 11:22:00

 

 这几天自学B树,感觉到原来悬而未决的指针问题又暴露出来了,回想起当初做平衡二叉树时,曾为指针的问题困扰好久,到CSDN上请教了下指针与引用,看后似懂非懂,不曾想到今日又遇此问题:

 

1.指针与引用

C++引入了参数引用机制,从而在一定程度上避免了对指针过多的纠缠,不过引用的机制掩盖了初学者对于指针的迷茫,但是这对真正想做技术来说不一定是好事。

下面是C++的一个引用调用:

void f(int &parameter )

 {

     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中实现的问题了。

 

小议如何改变指针的指向

//===================================================================== //TITLE: //    小议如何改变指针的指向...
  • tiemufeng1122
  • tiemufeng1122
  • 2013年08月22日 09:49
  • 524

小议C/C++字符串指针

首先还是来看一下C/C++中的内存分配: 栈中保存着函数的参数、返回地址和局部变量,调用函数之前先将参数入栈,调用指令将函数返回地址入栈,被调用函数负责保存调用函数的相关指针,为局部变量分配空间等...
  • acelit
  • acelit
  • 2017年03月30日 18:13
  • 120

小议C语言中的数组和指针

1.引言   在C语言中,数组和指针是其中非常重要又联系紧密的两种数据类型,同时也是重点难点集中的地方。在学习这些内容时,经常会碰到这样一些问题,例如:数组名是什么,就是首地址吗?数组如何访问元素?数...
  • u013203733
  • u013203733
  • 2017年06月29日 10:08
  • 41

小议 “数组”

数组分为:一维数组和二维数组 先介绍"一维数组" 一:一维数组的使用 {  一维数组 由三部分组成 :数组的类型名+数组的名称+数组的大小 }...
  • Maniac_wp
  • Maniac_wp
  • 2017年07月10日 16:04
  • 95

小议:人工智能

转载自:http://blog.csdn.net/flylittlehorse/article/details/60824886 2014年,大数据开始成为热词,在神州大地的各大...
  • woshihuangjianwei
  • woshihuangjianwei
  • 2017年04月26日 16:23
  • 181

小议:人工智能

带你领略不一样的人工智能。
  • flylittlehorse
  • flylittlehorse
  • 2017年03月08日 02:40
  • 1049

小议 “重载”、“覆盖”、“隐藏”

重载--overload:同一作用域的函数,函数名相同,函数参数不同,在调用时可实现重载。同一个类的成员函数为一个作用域,继承来的函数与成员函数不在同一个作用域中。 #include using...
  • cyqllfh
  • cyqllfh
  • 2013年11月25日 18:55
  • 259

面试题小议---BY gremount

P1:两个烧杯,一个放糖一个放盐,用勺子舀一勺糖到盐,搅拌均匀,然后舀一勺混合物会放糖的烧杯,问你两个烧杯哪个杂质多? 提示:相同。keyi...
  • gremount
  • gremount
  • 2014年04月05日 16:05
  • 965

搜索中的剪枝算法小议

【摘要】本文讨论了搜索算法中“剪枝”这一常见的优化技巧. 首先由回溯法解决迷宫问题展开论述,介绍了什么是剪枝; 而后分析剪枝的三个原则正确、准确、高效,并分别就剪枝的两种思路:可行性剪枝及最优性剪枝,...
  • wl6965307
  • wl6965307
  • 2013年01月19日 18:08
  • 490

小议面向对象的本质

之前在周爱民所著的《大道至简-软件工程实践者的思考》这本书中,看到了一篇关于面向对象本质的文章,觉得很好,自己总结了一下,分享给大家。     面向对象的编程思想,更多地来说只能是处于建立模型的阶段...
  • qq_23435275
  • qq_23435275
  • 2016年09月19日 23:14
  • 94
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:小议指针(一)
举报原因:
原因补充:

(最多只允许输入30个字)