首页 > 解决方案 > 是否可以取消引用指向结构的指针?

问题描述

我有一个指向结构的二维指针数组。我正在尝试将结构复制到其他数组元素指向的点。对我来说,明确的方法就是使用解引用运算符分配每个值。我不想这样做,array[0][1] = array[1][0];因为那会分配结构的地址。所以我想知道我是否可以

*array[0][1] = *array[1][0];

作为复制结构的更快方法?

标签: c

解决方案


要复制一个struct,一个简单的赋值就可以了。 memcpy()不是必需的 - 该函数调用也不是首选。

struct {
  int piece;
  int color;
} chessman;

chessman p1, p2;
...
p1 = p2;

使用指向 a 的指针数组struct,也可以。

chessman *array[8][8] = { 0 };

array[1][0] = malloc(sizeof *(array[1][0]));
assign_data(array[1][0]);

array[0][1] = malloc(sizeof *(array[0][1]));
assign_data(array[0][1]);
...
chessman empty = { 0 };
*array[0][1] = *array[1][0];
*array[1][0] = empty;

回想一下,这样的副本是浅副本。下面的赋值复制了 member 中的指针other_data,而不是引用的内容other_data

struct {
  int piece;
  int color;
  foo *other_data;
} chessman2;

chessman q1, q2;

q1 = q1; 

推荐阅读