读书人

请求大神们帮忙解释解决方案

发布时间: 2012-11-05 09:35:12 作者: rapoo

请求大神们帮忙解释
对于定义的一个结构体链表,如Quene
初始化两个对象S1和S2
对于把如果用S2=S1来赋值S2,那么在修改S2的时候为什么S1会一起被改了呢?特别是删除的时候。
typedef struct Student
{
int score;
int number;
}student;

typedef struct Quene
{
Student *elem; /* 存储空间基址 */
int length; /* 当前长度 */
int listsize; /* 当前分配的存储容量(以sizeof(student)为单位) */
}Quene;
//其他的初始化、插入等函数就不写了,下面是删除函数

Status QueneDelete(Quene *S,int score,int number)
{
Student *p,*q;
p=NULL;
if((*S).elem==NULL)
return ERROR;
for(int k=0;k<(*S).length;k++)
{
if((*S).elem[k].score==score && (*S).elem[k].number==number)
{
p=(*S).elem+k;
break;
}
if(k==(*S).length)
return ERROR;
}
if(p!=NULL)
{
q=(*S).elem+(*S).length-1; /* 表尾元素的位置 */
for(++p;p<=q;++p) /* 被删除元素之后的元素左移 */
{
(*(p-1)).number=(*p).number;
(*(p-1)).score=(*p).score;
}
(*L).length--; /* 表长减1 */
}
return OK;
}

void main()
{
int k=1;
Quene Q1,Q2;
Student s;
InitList(&Q1);InitList(&Q2);
for(int i=1;i<4;i++)
{
for(int j=0;j<3;j++)
{
s.score=j;s.number=i;
QueneInsert(&Q1,s);k++;
}
}
printQuene(Q1);
Q2=Q1;
QueneDelete(&Q2,1,2)
printQuene(Q1);
printQuene(Q2);
}
在最后删除Q2里的一个元素,就会导致Q1里的那个相同的元素也被删除,而且,Q1的长度不变,只是其最后的一个元素复制了。而Q2里的长度会减少一个。
不知道这个是甚么原因,哪位牛人能帮忙解释,主要是Q2=Q1到底有甚么不一样,难道不是赋值吗?

[解决办法]
POD结构体里有指针,直接复制是位复制,Q2=Q1;后,Q1和Q2的elem指向同一块内存了。
[解决办法]
两个人同穿一条裤子。

读书人网 >C++

热点推荐