小议指针(一)

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

 

抖动算法小议2

这里检讨一下,自己虽然是个搞C/C++的,为了偷懒,先用Matlab解决问题……这里是Matlab的Bayer抖动的算法,用于将256级别的灰度图像抖动成同样尺寸的黑白图片。clear;clc;m1 ...
  • coolbacon
  • coolbacon
  • 2009-04-01 22:04:00
  • 5663

小议工作现实和理想

现在我在的公司也算是业内比较有名气的大公司了。之所以在我毕业后就立即选择这样的公司,除了名气之外,还有就是大公司对于新入行的员工可以给予更好的过渡和缓冲,我一度为自己的这个选择而暗暗庆幸。但是现在已经...
  • toafu
  • toafu
  • 2005-04-26 10:46:00
  • 1174

小议TCP的MSS以及MTU

标题: 小议TCP的MSS以及MTU 小议TCP的MSS以及MTU [前言]漫漫51长假,没有好的去处,只能每日上网消遣,某日逛到NBO灌水,见一帖曰:无法通过2514路由器上MSN(出口为ADSL线...
  • ncdawen
  • ncdawen
  • 2006-01-21 12:48:00
  • 1895

小议“转载”

小议“转载”    应该是19号吧,习惯性的打开CSDN,看到自己写的那篇《由WPS 2005想到的》竟然跑到首页的IT新闻区里面去了。    有些羞愧,自己随随便便瞎扯,信马游疆想到哪写到哪,根本就...
  • ZiJinShi
  • ZiJinShi
  • 2005-09-23 23:06:00
  • 1817

小议学习java的浮躁心态(1)——引出篇

                    小议学习java的浮躁心态(1)                                  ——引出篇     “切忌浮躁”——我想这是在任何学习方法中...
  • james999
  • james999
  • 2003-10-27 02:10:00
  • 4096

嵌入式linux小议:ELF 文件格式分析

  • 2009年07月19日 18:46
  • 590KB
  • 下载

指针变量+1,代表着什么?

int a=10;int *pofa=&a;pofa=pofa+1; 问题就是pofa的值是不是pofa的值加一呢?很明显,pofa是一个指针变量,它指向整形变量a的地址,那么pofa到底是多少呢?答...
  • bravekingzhang
  • bravekingzhang
  • 2011-05-18 21:12:00
  • 4488

指针加一

例: int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); &a+1不是首地址加一,系统会认为加一个a数组的偏移,是偏移了一个数组的大小 ptr是&(a[...
  • zy61995
  • zy61995
  • 2015-11-15 16:42:32
  • 140

ArcGIS中坐标系统小议.doc

  • 2008年04月27日 12:10
  • 30KB
  • 下载

“凡事预则立,不预则废”?

中国有一句古话,叫“凡事预则立,不预则废”。大意是做事情,我们应该提前准备,这样就能确保其产生好的结果。但在现实生活中,情况一定是这样的吗?           凡事提前准备为什么好?     ...
  • zhouzxi
  • zhouzxi
  • 2012-05-19 17:02:45
  • 2859
收藏助手
不良信息举报
您举报文章:小议指针(一)
举报原因:
原因补充:

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