本帖最后由 mweibiao 于 2011-06-03 20:34:51 编辑

解决方案 »

  1.   

    C里面的引用类型,首先要知道
    int a = 1;
    int &b = a; //这里b是引用类型,引用a,也就是说b和a是同一个内存地址,b也就相当于a的别名
    b = 2; //既然,改变b的内存地址的内容,也就相当于改变a的内容,因为a和b是同一个地址,所以a也是2int &b = a; 效果上等同于 int *b = &a; //但这样的话b是指针类型,指向a的地址,要改变a就需要改变*b,即改变*b=2,那么a也会变为2,这里注意b本身是个地址,所以*b才是内容,这是指针和引用类型的区别好了,有了这个知识,再来看你的代码
    mm* &p=a->l; //这里p是个引用类型,引用a->l,也就是说p是a->l的别名
    然后p=c;//改变p就相当于改变a->l,也就是a-l=c
    所以最后输出是c->num,也就是3如果改为
    mm* p=a->l; //p是这指针类型,p=a->l,也就是p和a->l的值(是个地址)相等
    然后p=c;这里是改变p的指向,跟a->l没有任何关系,a->l还是原来的值(地址),也就是a-l还是等于b
    所以最后输出是b->num,也就是2
      

  2.   

    引用通俗点讲就是为变量创建一个别名,这个存在主要是为了尽量避免使用指针(尤其是二重指针)mm* &p=a->l;
    可以理解为p就是a->l的别名,也就是一块内存对应两个(多个)变量名
    修改了p就修改了a->l比如int a=10;
    int &b=a;
    那么b就是a的别名,两个东西使用同一个内存地址,也就说&a与&b是一样的
      

  3.   

    引用是C++的概念,C没有这东西,C里只能用指针同样的效果要写成
    mm** p=&a->l;
    *p=c;