若有这样一个问题
先不看答案,各位自己想想办法,看看能不能解决。经过思考后,再看答案。
解决办法如下:
#include
#include
#include
//用指针操作结构体,用的是堆内存
//结构体指针直接操作内存,形参是指针,操作的内存与实参指向同一块内存
//相比结构体作为参变量传入函数还得拷贝一份临时结构体作为形参进行运算及离开函数还得进行销毁
//节省了不少开销
#ifndef _POINT_1_
#define _POINT_1_
//结构体
typedef struct Point
{
int x;
int y;
struct Point*Next1;
struct Point*Next2;
} *Pt;
//打印
void print(Pt srv)
{
printf("(%d,%d) ",srv->x,srv->y);
}
//初始化
Pt instialize(int p_x,int p_y)
{
Pt dst= (Pt)malloc(sizeof(struct Point));
dst->x=p_x;
dst->y=p_y;
dst->Next1=NULL;
dst->Next2=NULL;
return dst;
}
//赋值
Pt assignment(Pt srv)
{
if(srv==NULL)
{
printf("\nThe inputed pointer in assignment is NULL!");
exit(1);
}
free(srv->Next1);
free(srv->Next2);
Pt dst= (Pt)malloc(sizeof(struct Point));
dst->x=srv->x;
dst->y=srv->y;
//若两指针指向同一块内存,用这两个不同的指针free同一块内存,会出现错误。
dst->Next1=srv;
dst->Next2=NULL;
return dst;
}
//相加
Pt add(Pt first,Pt second)
{
if(first==second)
{
printf("\n can not input the same two variable!");
exit(1);
}
if(first==NULL||second==NULL)
{
printf("\nThe inputed pointer in add is NULL!");
exit(1);
}
//清理两个冗余指针,使其不能互指另一对象
if(first->Next1==second)
first->Next1=NULL;
if(first->Next2==second)
first->Next2=NULL;
if(second->Next1==first)
second->Next1=NULL;
if(second->Next2==first)
second->Next2=NULL;
//释放冗余指针指向的内存
free(first->Next1);
free(first->Next2);
free(second->Next1);
free(second->Next2);
Pt sum= (Pt)malloc(sizeof(struct Point));
sum->x=first->x+second->x;
sum->y=first->y+second->y;
sum->Next1=first;
sum->Next2=second;
return sum;
}
//释放
void del(Pt srv)
{
free(srv->Next1);
free(srv->Next2);
free(srv);
}
#endif
//计算时间,调用第一次与第二次之间时间段,第三次与第四次时间段,以此类推。
void clock_mark()
{
static clock_t start;
static clock_t end;
static int t;
if(t==0)
{
start=clock();
printf("\n*****计时开始*****\n");
t=1;
}
else
{
end=clock();
double cost_time=(double)((end-start)/CLOCKS_PER_SEC);
printf("\n*****计时结束Cost: %f seconds*****\n",cost_time);
t=0;
}
}
int main()
{
clock_mark();
printf("\nA,B,C初始化:");
Pt A=instialize(3,5);
Pt B=instialize(1,2);
Pt C=assignment(A);
A=assignment(A);
print(A);
print(B);
print(C);
print(A);
printf("\nB=A+B:");
B=add(A,B);
print(B);
printf("\nC=A+B:");
C=add(A,B);
print(C);
int i;
int j;
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
B=add(A,B);
print(B);
printf("\n");
}
}
B=add(A,B);
A=add(A,B);
del(A);
del(B);
del(C);
clock_mark();
printf("\nHello World!!!\n");
exit(0);
}