| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 814 人关注过本帖
标题:C++引用符号(&)疑问
只看楼主 加入收藏
ws万帅
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2011-1-11
结帖率:75%
收藏
已结贴  问题点数:10 回复次数:10 
C++引用符号(&)疑问
#include<stdio.h>
#include<stdlib.h>
#define SIZE 20
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct
{
    ElemType *elem;
    int length;
    int listsize;   
}SqList;
int flag1=1,flag2=1;
Status InitList(SqList &L,int size);
Status GetElem(SqList L,int i,ElemType &e);
void PriorElem(SqList LA,SqList LB);
void Prior_LElem(SqList L,int Flag);
void NextElem(SqList LA,SqList LB);
void Next_LElem(SqList L,int Flag);
void ListInsert(SqList &LA,SqList &LB);
void ListInsert_L(SqList &L,int Flag);
void ListDelete(SqList &LA,SqList &LB);
void Delete_LElem(SqList &L,int Flag);
void ClearList(SqList &LA,SqList &LB);
void DestoryList(SqList &LA,SqList &LB,SqList &LC);
void MergeList(SqList LA,SqList LB,SqList &LC);
void Output(SqList LA,SqList LB,SqList LC);
void output_L(SqList L);
void main()
{
    int a=1;
    SqList LA,LB,LC;
    InitList(LA,SIZE);
    InitList(LB,SIZE);
    InitList(LC,2*SIZE);
    ListInsert_L(LA,flag1);
    ListInsert_L(LB,flag2);
    system("cls");
    while(a)
    {
        printf("\n\n");
        printf("\t\t\t    主 菜 单\n\n");
        printf("\t\t-------------------------------------\n\n");
        printf("\t\t\t1——输 出 前 驱\n\n");
        printf("\t\t\t2——输 出 后 继\n\n");
        printf("\t\t\t3——插 入 元 素\n\n");
        printf("\t\t\t4——删 除 元 素\n\n");
        printf("\t\t\t5——置 空 线 性 表\n\n");
        printf("\t\t\t6——销 毁 线 性 表\n\n");
        printf("\t\t\t7——合 并 线 性 表\n\n");
        printf("\t\t\t8——输 出 线 性 表\n\n");
        printf("\t\t\t0——退 出\n");
        scanf("%d",&a);
        switch(a)
        {
        case 1:
            system("cls");
            PriorElem(LA,LB);
            system("cls");
            break;
        case 2:
            system("cls");
            NextElem(LA,LB);
            system("cls");
            break;
        case 3:
            system("cls");
            ListInsert(LA,LB);
            system("cls");
            break;
        case 4:
            system("cls");
            ListDelete(LA,LB);
            system("cls");
            break;
        case 5:
            system("cls");
            ClearList(LA,LB);
            system("cls");
            break;
        case 6:
            system("cls");
            DestoryList(LA,LB,LC);
            system("cls");
            break;
        case 7:
            system("cls");
            MergeList(LA,LB,LC);
            system("cls");
            break;
        case 8:
            system("cls");
            Output(LA,LB,LC);
            system("cls");
            break;
        case 0:
            system("cls");
            printf("\n\n\n\n\n\n\n\n\t\t\t\t    谢谢使用\n\n\n\n\n\n\n\n\n\n\n\n");
            break;
        }
    }
}
Status InitList(SqList &L,int size)
{
    L.elem=(ElemType *)malloc(size*sizeof(ElemType));
    if(!L.elem)
        exit(OVERFLOW);
    L.length=0;
    L.listsize=size;
    return OK;
}
Status GetElem(SqList L,int i,ElemType &e)
{
    if(i<1||i>L.length)
        return ERROR;
    e=L.elem[i-1];
    return OK;
}
void PriorElem(SqList LA,SqList LB)
{
    int a;
    printf("\n\n");
    printf("\t\t\t    主 菜 单\n\n");
    printf("\t\t-------------------------------------\n\n");
    printf("\t\t\t1——输出LA中元素的前驱\n\n");
    printf("\t\t\t2——输出LB中元素的前驱\n\n");
    printf("\t\t\t3——退出\n");
    scanf("%d",&a);
    switch(a)
    {
    case 1:
        system("cls");
        Prior_LElem(LA,flag1);
        system("cls");
        break;
    case 2:
        system("cls");
        Prior_LElem(LB,flag2);
        system("cls");
        break;
    case 3:
        system("cls");
        break;
    }
}
void Prior_LElem(SqList L,int Flag)
{
    int a,e,i,flag=0;
    if(L.length==0)
        printf("线性表已被置空");
    else if(Flag==0)
        printf("线性表已被销毁");
    else
    {
        printf("请输入输出前驱的元素:");
G:       scanf("%d",&a);
        for(i=1;i<=L.length;i++)
        {
            GetElem(L,i,e);     
            if(a==e)
            {
                flag=1;
                if(i==1)
                {
                    printf("\n\n元素%d没有前驱",a);
                    break;
                }
                GetElem(L,i-1,e);        
                printf("\n\n元素%d的前驱是:%d",a,e);
            }
        }
        if(flag==0)
        {
            printf("\n\n你输的数据不在线性表中,请重新输入:");
            goto G;
        }
    }
    printf("\n\n\n\n\n\n按Enter键→");
    getchar();getchar();
}
void NextElem(SqList LA,SqList LB)
{
    int a;   
    printf("\n\n");
    printf("\t\t\t    主 菜 单\n\n");
    printf("\t\t-------------------------------------\n\n");
    printf("\t\t\t1——输 出 LA 中 元 素 的 后 继\n\n");
    printf("\t\t\t2——输 出 LB 中 元 素 的 后 继\n\n");
    printf("\t\t\t3——退 出\n");
    scanf("%d",&a);
    switch(a)
    {
    case 1:
        system("cls");
        Next_LElem(LA,flag1);
        system("cls");
        break;
    case 2:
        system("cls");
        Next_LElem(LB,flag2);
        system("cls");
        break;
    case 3:
        system("cls");
        break;
    }
}
void Next_LElem(SqList L,int Flag)
{
    int a,e,i,flag=0;
    if(L.length==0)
        printf("线性表已被置空");
    else if(Flag==0)
        printf("线性表已被销毁");
    else
    {
        printf("请输入输出后继的元素:");
I:        scanf("%d",&a);
        for(i=1;i<=L.length;i++)
        {   
            GetElem(L,i,e);     
            if(a==e)
            {
                flag=1;
                if(i==L.length)
                {
                    printf("\n\n元素%d没有后继",a);
                    break;
                }
                GetElem(L,i+1,e);              
                printf("\n\n元素%d的后继是:%d",a,e);
            }
        }
        if(flag==0)
        {
            printf("\n\n你输的数据不在线性表中,请重新输入:");
            goto I;
        }
    }
    printf("\n\n\n\n\n\n按Enter键→");
    getchar();getchar();
}
void ListInsert(SqList &LA,SqList &LB)
{
    int a;        
    printf("\n\n");
    printf("\t\t\t    主 菜 单\n\n");
    printf("\t\t-------------------------------------\n\n");
    printf("\t\t\t1——在 LA 中 插 入 元 素\n\n");
    printf("\t\t\t2——在 LB 中 插 入 元 素\n\n");
    printf("\t\t\t3——退 出\n");
    scanf("%d",&a);
    switch(a)
    {
    case 1:
        system("cls");
        ListInsert_L(LA,flag1);
        system("cls");
        break;
    case 2:
        system("cls");
        ListInsert_L(LB,flag2);
        system("cls");
        break;
    case 3:
        system("cls");
        break;
    }
}
void ListInsert_L(SqList &L,int Flag)
{
    int a,b,i,*p,*q;
    if(Flag==0)
        printf("线性表已被销毁");
    else
    {
        if(L.length==0)
        {
            printf("请在线性表中输入数据,输入0结束(0不作为线性表中的数据)\n");
            for(i=0;i<SIZE;i++)
            {
                scanf("%d",&L.elem[i]);
                if(L.elem[i]==0)
                    break;
                L.length++;
            }
        }
        else if(L.length>0&&L.length<SIZE)
        {
            printf("请输入要插入的数据:");
A:           scanf("%d",&a);
            for(i=0;i<L.length;i++)
            {
                if(a==L.elem[i])
                {
                    printf("\n数据%d已存在线性表中,请重新输入:",a);
                    goto A;
                }
            }
            printf("\n请输入要插入的位置:(1~%d)",L.length);
B:            scanf("%d",&b);
            if(b>L.length||b<1)
            {
                printf("\n\n你输入的位置有误\n请重新输入:");
                goto B;
            }
            q=&(L.elem[b-1]);
            for(p=&(L.elem[L.length-1]);p>=q;--p)
                *(p+1)=*p;
            *q=a;
            ++L.length;
            printf("\n数据%d已插入到线性表中",a);   
        }
        else
            printf("线性表已存满");
    }
}
void ListDelete(SqList &LA,SqList &LB)
{   
    int a;   
    printf("\n\n");
    printf("\t\t\t    主 菜 单\n\n");
    printf("\t\t-------------------------------------\n\n");
    printf("\t\t\t1——删 除 LA 中 的 元 素\n\n");
    printf("\t\t\t2——删 除 LB 中 的元 素\n\n");
    printf("\t\t\t3——退 出\n");
    scanf("%d",&a);
    switch(a)
    {
    case 1:
        system("cls");
        Delete_LElem(LA,flag1);
        system("cls");
        break;
    case 2:
        system("cls");
        Delete_LElem(LB,flag2);
        system("cls");
        break;
    case 3:
        system("cls");
        break;
    }
}
void Delete_LElem(SqList &L,int Flag)
{
    int a,*p,*q,flag=0,i;
    if(L.length==0)
        printf("线性表已被置空");
    else if(Flag==0)
        printf("线性表已被销毁");
    else
    {
        printf("请输入要删除的数据:");
E:        scanf("%d",&a);
        for(i=0;i<L.length;i++)
        {
            if(a==L.elem[i])
            {
                flag=1;
                break;
            }
        }
        if(flag==0)
        {
            printf("\n数据%d不在线性表中,请重新输入:",a);
            goto E;
        }
        p=&(L.elem[i]);
        q=L.elem+L.length-1;
        for(++p;p<=q;++p)
            *(p-1)=*p;
        --L.length;
        printf("第%d个元素%d已被删除\n",i+1,a);
        printf("\n\n\n按Enter键→");
        getchar();getchar();
    }
}
void ClearList(SqList &LA,SqList &LB)
{
    int a;   
    printf("\n\n");
    printf("\t\t\t    主 菜 单\n\n");
    printf("\t\t-------------------------------------\n\n");
    printf("\t\t\t1——将 LA 置 为 空 表\n\n");
    printf("\t\t\t2——将 LB 置 为 空 表\n\n");
    printf("\t\t\t3——将 LA 和 LB 置 为 空 表\n\n");
    printf("\t\t\t4——退 出\n");
    scanf("%d",&a);
    switch(a)
    {
    case 1:
        system("cls");
        LA.length=0;
        printf("已将LA表置为空表\n");
        printf("\n\n\n按Enter键→");
        getchar();getchar();
        system("cls");
        break;
    case 2:
        system("cls");
        LB.length=0;
        printf("已将LB表置为空表\n");
        printf("\n\n\n按Enter键→");
        getchar();getchar();
        system("cls");
        break;
    case 3:   
        system("cls");
        LA.length=0;
        LB.length=0;        
        printf("已将LA和LB表置为空表\n");
        printf("\n\n\n按Enter键→");
        getchar();getchar();
        system("cls");
        break;
    case 4:
        system("cls");
        break;
    }
}
void DestoryList(SqList &LA,SqList &LB,SqList &LC)
{
    int a;   
    printf("\n\n");
    printf("\t\t\t    主 菜 单\n\n");
    printf("\t\t-------------------------------------\n\n");
    printf("\t\t\t1——删 除 LA 表\n\n");
    printf("\t\t\t2——删 除 LB 表\n\n");
    printf("\t\t\t3——删 除 LA 和 LB 表\n\n");
    printf("\t\t\t4——退 出\n");
    scanf("%d",&a);
    switch(a)
    {
    case 1:
        system("cls");
        free(LA.elem);
        flag1=0;
        printf("已删除LA表\n");
        printf("\n\n\n按Enter键→");
        getchar();getchar();
        system("cls");
        break;
    case 2:
        system("cls");
        free(LB.elem);
        flag2=0;
        printf("已删除LB表\n");
        printf("\n\n\n按Enter键→");
        getchar();getchar();
        system("cls");
        break;
    case 3:   
        system("cls");
        free(LA.elem);
        flag1=0;
        free(LB.elem);
        flag2=0;
        printf("已删除LA和LB表\n");
        printf("\n\n\n按Enter键→");
        getchar();getchar();
        system("cls");
        break;
    case 4:
        system("cls");
        break;
    }
}
void MergeList(SqList LA,SqList LB,SqList &LC)
{
    int *pa,*pb,*pc,*pa_last,*pb_last;
    pa=LA.elem;
    pb=LB.elem;
    pc=LC.elem;
    pa_last=LA.elem+LA.length-1;
    pb_last=LB.elem+LB.length-1;
    while(pa<=pa_last&&pb<=pb_last)
    {
        if(*pa<*pb)
        {
            *pc++=*pa++;
            LC.length++;
        }
        else if(*pa=*pb)
        {
            *pc++=*pa++;
            pb++;
            LC.length++;
        }
        else
        {            
            *pc++=*pb++;
            LC.length++;
        }
    }
    while(pa<=pa_last)
    {
        *pc++=*pa++;
        LC.length++;   
    }
    while(pb<=pb_last)
    {
        *pc++=*pb++;
        LC.length++;        
    }
    printf("已将LA和LB合并到LC中");
    printf("\n\n\n按Enter键→");
    getchar();getchar();
    system("cls");
}
void Output(SqList LA,SqList LB,SqList LC)
{
    int a,b,c,d,i;   
    printf("\n\n");
    printf("\t\t\t    主 菜 单\n\n");
    printf("\t\t-------------------------------------\n\n");
    printf("\t\t\t1——输 出 LA 表\n\n");
    printf("\t\t\t2——输 出 LB 表\n\n");
    printf("\t\t\t3——输 出 LC 表\n\n");
    printf("\t\t\t4——输 出 LA、LB 和 LC 表\n\n");
    printf("\t\t\t5——退 出\n");
    scanf("%d",&a);
    switch(a)
    {
    case 1:
        system("cls");
        if(LA.length==0)
            printf("线性表LA已被置空");
        else if(flag1==0)
            printf("线性表LA已被销毁");
        else
        {
            printf("\n\n\t\t\t\t主 菜 单\n\n");
            printf("\t\t     -------------------------------------\n\n");
            printf("\t\t\t1——将 线 性 表 LA 按 原 样 输 出\n\n");
            printf("\t\t\t2——将 线 性 表 LA 按 顺 序 输 出\n\n");
            printf("\t\t\t3——退出\n");
            scanf("%d",&b);
            switch(b)
            {
            case 1:
                system("cls");
                printf("线性表LA中的元素:");
                for(i=0;i<LA.length;i++)
                    printf("%d     ",LA.elem[i]);
                break;
            case 2:
                system("cls");
                output_L(LA);
                break;
            case 3:
                system("cls");
                break;
            }            
        }
        printf("\n\n\n按Enter键→");
        getchar();getchar();
        system("cls");
        break;
    case 2:   
        system("cls");
        if(LB.length==0)
            printf("线性表LB已被置空");
        else if(flag2==0)        
            printf("线性表LB已被销毁");   
        else
        {   
            printf("\n\n\t\t\t\t主 菜 单\n\n");
            printf("\t\t     -------------------------------------\n\n");
            printf("\t\t\t1——将 线 性 表 LB 按 原 样 输 出\n\n");
            printf("\t\t\t2——将 线 性 表 LB 按 顺 序 输 出\n\n");
            printf("\t\t\t3——退出\n");
            scanf("%d",&c);
            switch(c)
            {
            case 1:
                system("cls");
                printf("线性表LB中的元素:");
                for(i=0;i<LB.length;i++)
                    printf("%d     ",LB.elem[i]);
                break;
            case 2:
                system("cls");
                output_L(LB);
                break;
            case 3:
                system("cls");
                break;
            }   
        }
        printf("\n\n\n按Enter键→");
        getchar();getchar();
        system("cls");
        break;
    case 3:
        system("cls");
        if(LC.length==0)
            printf("线性表LC未存入数据");
        else
        {        
            printf("\n\n\t\t\t\t主 菜 单\n\n");
            printf("\t\t     -------------------------------------\n\n");
            printf("\t\t\t1——将 线 性 表 LC 按 原 样 输 出\n\n");
            printf("\t\t\t2——将 线 性 表 LC 按 顺 序 输 出\n\n");
            printf("\t\t\t3——退出\n");
            scanf("%d",&d);
            switch(d)
            {
            case 1:
                system("cls");
                printf("线性表LC中的元素:");
                for(i=0;i<LC.length;i++)
                    printf("%d     ",LC.elem[i]);
                break;
            case 2:
                system("cls");
                output_L(LC);
                break;
            case 3:
                system("cls");
                break;
            }   
        }
        printf("\n\n\n按Enter键→");
        getchar();getchar();
        system("cls");
        break;
    case 4:   
        system("cls");
        if(LA.length==0)
            printf("线性表LA已被置空\n\n");
        else if(flag1==0)
            printf("线性表LA已被销毁\n\n");
        else
        {
            printf("线性表LA中的元素:");
            for(i=0;i<LA.length;i++)
                printf("%d     ",LA.elem[i]);
        }
        if(LB.length==0)
            printf("\n\n线性表LB已被置空\n\n");
        else if(flag2==0)        
            printf("\n\n线性表LB已被销毁\n\n");   
        else
        {
            printf("\n\n线性表LB中的元素:");
            for(i=0;i<LB.length;i++)
                printf("%d     ",LB.elem[i]);
        }
        if(LC.length==0)
            printf("\n\n线性表LC未存入数据");
        else
        {
            printf("\n\n线性表LC中的元素:");
            for(i=0;i<LC.length;i++)
                printf("%d     ",LC.elem[i]);
        }   
        printf("\n\n\n按Enter键→");
        getchar();getchar();
        system("cls");
        break;
    case 5:
        system("cls");
        break;
    }
}
void output_L(SqList L)
{
    int a,i,j,k;
    printf("线性表元素从小到大的顺序排列为:");
    for(i=0;i<L.length-1;i++)
    {
        k=i;
        for(j=k;j<L.length;j++)
            if(L.elem[k]>L.elem[j])
                k=j;
        a=L.elem[k];L.elem[k]=L.elem[i];L.elem[i]=a;
    }
    for(i=0;i<L.length;i++)
        printf("%d    ",L.elem[i]);
    printf("\n\n线性表元素从大到小的顺序排列为:");
    for(i=0;i<L.length-1;i++)
    {
        k=i;
        for(j=k;j<L.length;j++)
            if(L.elem[k]<L.elem[j])
                k=j;
        a=L.elem[k];L.elem[k]=L.elem[i];L.elem[i]=a;
    }
    for(i=0;i<L.length;i++)
        printf("%d    ",L.elem[i]);
}





    我在C++里运行此程序时,没有出现错误,但问题在于输出函数,每次将线性表LA或LB选择按顺序输出后,再次将LA或LB按原样输出时就会出现问题。输出的结果是排序后的顺序,并非是原样输入时的顺序。但输出函数的形参里并没有使用&(引用)符号,线性表LA和LB不应该会发生变化(LA和LB应是原样输入时的顺序),对此感到很疑惑。非常感谢帮助我修改好程序!
搜索更多相关主题的帖子: 符号 
2011-03-17 12:41
qq1023569223
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:湖南科技大学
等 级:贵宾
威 望:26
帖 子:2753
专家分:13404
注 册:2010-12-22
收藏
得分:0 
太长了,直接看不下去了!

   唯实惟新 至诚致志
2011-03-17 12:53
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:10 
把能改成const &的&全部改成const &,看下编译器什么说的。

迭代的是人,递归的是神。
2011-03-17 12:58
ws万帅
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2011-1-11
收藏
得分:0 
回复 3楼 lintaoyn
不懂你说的意思,可否说详细一点,或是你把程序修改后运行一下,看行不行,谢谢
2011-03-17 13:29
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:0 
程序代码:
class mylist
{
public:
mylist(SqList obj){

        list = obj;
        list.elem = new ElemType[obj.listsize];
        for(int i = 0; i < obj.listsize;++i)
        {
            list.elem[i] = obj.elem[i];
        }
}
operator SqList ()
{
    return list;
}
SqList list;
};
void output_L(mylist L);//修改函数声明
void output_L(mylist my)
{
    SqList L = (SqList)my;//简单的转换回你写的。
    int a,i,j,k;
    printf("线性表元素从小到大的顺序排列为:");
这样修改后运行正常。
我做的改动只是想验证自己对问题的想法,你自己再修改下,让代码好看点。
问题出在SqList::elem只是个指针,按位复制使多个对像指向同一块内存空间。

迭代的是人,递归的是神。
2011-03-17 14:54
ws万帅
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2011-1-11
收藏
得分:0 
回复 5楼 lintaoyn
你修改后的程序中用到的知识好像超出了我们现在所学的知识,我现在还只是刚把C语言学完,对C++还不了解,能否换一种方法,或是简单讲解一下。很是感谢!
2011-03-17 15:34
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:0 
程序代码:
void output_L(SqList L)
{
    ElemType *elemp = L.elem;//先保存一会要进行复制的指针
    L.elem = (ElemType *)malloc(L.listsize*sizeof(ElemType));//获取只属于自己的内存空间,消除你说的问题
    for(int index = 0; index < L.listsize;++index)//复制
    {
        L.elem[index] = elemp[index];
    }
你看下
typedef struct
{
    ElemType *elem;//传递参数时,只是复制了elem的值,实际使用的内存是同一块
    int length;
    int listsize;   
}SqList;

迭代的是人,递归的是神。
2011-03-17 15:50
ws万帅
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2011-1-11
收藏
得分:0 
我在使用参数传递时,应该只是将LA赋值给L,没有使用引用符号&,( 在void output_L(SqList L)中L前并没有加&符号,系统应该又另外给L分配了内存单元),参数传递完后,L和LA应该不会有任何的关系了。此后在void output_L(SqList L)函数里改变线性表L中存放的数据,不会影响到LA中的数据。不知当如何理解?



typedef struct
{
    ElemType *elem;//传递参数时,只是复制了elem的值,实际使用的内存是同一块
    int length;
    int listsize;   
}SqList;
上面的一段程序中所说的“参数传递,只是复制了elem的值,实际使用的内存是同一块”。我对此句话很不理解?

void output_L(SqList L)
{
    ElemType *elemp = L.elem;//先保存一会要进行复制的指针
    L.elem = (ElemType *)malloc(L.listsize*sizeof(ElemType));//获取只属于自己的内存空间,消除你说的问题
    for(int index = 0; index < L.listsize;++index)//复制
    {
        L.elem[index] = elemp[index];
     }
}
请问上面一段程序的思想是不是在output_L()函数里又另外分配一个存储单元,只改变线性表L中的数据,而不改变LA中的数据。这样做并没有错误,但让我不解的是:就算不再分配存储单元,在参数传递时,系统就应该给L有另外分配了存储单元,不必再在函数里再一次的分配内存,改变L中数据的值,对LA来说应该没有关系。



2011-03-17 16:33
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:0 
指针储存的是地址。利用这个地址做什么是我们的事。复制一个对象是复制这个对象储存的内容(=也看成复制)。
你不明白的地方自己看书或百度,看下指针的优点和缺点,应该能解决你的所有不解。

迭代的是人,递归的是神。
2011-03-17 17:24
lucky563591
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:765
专家分:2103
注 册:2009-11-18
收藏
得分:0 
有什么好疑问的,取地址,作引用
2011-03-18 08:05
快速回复:C++引用符号(&)疑问
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.059703 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved