下面交换变量有什么区别?

wwangzhihang100 2009-08-21 08:18:18

//method 1
typedef struct m_struct {
int i;
int j;
} m_struct;
m_struct x, y, z;
x.i = 1;
x.j = 2;
y.i = 3;
y.j = 4;
//exchange x and y
z = x;
x = y;
y = z;
//method 2
m_struct *px, *py, *pz;
px = malloc(sizeof(m_struct));
py = malloc(sizeof(m_struct));
px->i = 1;
px->j = 2;
py->i = 3;
py->j = 4;
//exchange
pz = px;
px = py;
py = pz;
...全文
63 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
superbtl 2009-08-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wwangzhihang100 的回复:]
主要是我不清楚z = x;操作是不是很慢,比指针的赋值要慢么?

[/Quote]其实指针也可以看成一个二进制的值 只不过它表示的是地址的赋值 赋值次数比较一下看看
jinwei1984 2009-08-21
  • 打赏
  • 举报
回复
pz指针占有的空间确实是比z小 指针在32位机器固定的是4个字节,而结构体取决于其成员

在c++中,如果是类的对象的话,赋值操作与交换指针的区别就比较大了
highball 2009-08-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wwangzhihang100 的回复:]
主要是我不清楚z = x;操作是不是很慢,比指针的赋值要慢么?

[/Quote]
如果struct比较大,肯定就是第二种方法好了
wwangzhihang100 2009-08-21
  • 打赏
  • 举报
回复
主要是我不清楚z = x;操作是不是很慢,比指针的赋值要慢么?
fox000002 2009-08-21
  • 打赏
  • 举报
回复
两种是完全不同的操作

method1 操作的类型是 struct m_struct

method2 操作的类型是 struct m_struct *
superbtl 2009-08-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 highball 的回复:]
第二种方法少分配了一个m_struct大小的空间
[/Quote]pz
highball 2009-08-21
  • 打赏
  • 举报
回复
第二种方法少分配了一个m_struct大小的空间

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧