作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有以下代码。
struct rectangle {
int length;
int breadth;
};
int main (void)
{
struct rectangle a,b;
a.length = 10;
a.breadth = 5;
b=a;
printf("\nValues of b.length = %d, b.breadth=%d\n",b.length,b.breadth);
return 0;
}
上面的赋值是否有效?(b=a) 我在我的项目中是这样做的。我收到了一条评论意见,指出这种类型的分配是错误的,我应该使用 memcpy 来完成。我打印了 b 的值并进行了检查。这些值是正确的。我想知道为什么上面的分配是错误的? 如果将结构变量传递给函数并将其捕获在单独的变量中时会发生什么错误?我希望我的问题很清楚。如果我对我的问题不清楚,请回复我。
最佳答案
在我看来,审稿人被误导了。这是非常正确的,结构值就像任何其他值一样,分配它们就可以了。而且它比调用 memcpy()
更清晰,而且更不容易出错。
在复制相同类型的值时,我总是不得不停下来思考将什么作为第三个参数传递给 memcpy()
,因为我发现它不是显而易见的选择。所以,这是一个不那么教学的问题,当然它只是读起来更好。
此外,编译器可能足够聪明不会复制任何可能潜伏在那里的额外填充和/或对齐字节,memcpy()
永远做不到。它是一个更高级别的构造,因此“更好”。
关于c - 结构mystruct a = b;这有效吗?结构变量直接赋值,在C中有效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11431699/
我是一名优秀的程序员,十分优秀!