c - 是否可以取消引用指向结构的指针?
问题描述
我有一个指向结构的二维指针数组。我正在尝试将结构复制到其他数组元素指向的点。对我来说,明确的方法就是使用解引用运算符分配每个值。我不想这样做,array[0][1] = array[1][0];
因为那会分配结构的地址。所以我想知道我是否可以
*array[0][1] = *array[1][0];
作为复制结构的更快方法?
解决方案
要复制一个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;
推荐阅读
- algorithm - 为什么执行以下函数会出现运行时错误:来自 abort(3) (SIGABRT) 的中止信号?
- nlp - 预测法语和英语食物描述的正确匹配
- sqlalchemy - 有没有办法使用 SQLAlchemy 在 Teradata 表上创建主索引?
- c++ - 向量指针奇怪的结果
- python-3.x - python 正则表达式函数用特殊字符分割字符串
- regex - 是否可以匹配字符串中所有出现的模式,具有给定的开始和结束?
- java - 在 linux 上使用 ant 编译时出错:错误的版本 52.0,应该是 50.0
- scala - spark数据框中orderBy的列列表
- postgresql - PostgreSQL 使用 COALESCE 或其他条件表达式来设置字段
- spring - Spring Data MongoDB 与原生 MongoDB