struct a{
int a;
char b;
} c,d={1,2},e;
c=d //allowed
c=d+e //not allowed
分配工作,因为编译器生成汇编代码来移动字节。 所以可以为其他运营商做同样的事情。 那么为什么C没有这个功能呢?
< ===========>
根据要求,一些功能可以.. 1.在添加大量(超过长)的同时,我们不必使用循环来长时间添加它。
c = a + b
会奏效。
转移阵列。
乘法。
所以我们不必编写额外的代码,因为编译器可以生成汇编代码。
答案 0 :(得分:11)
因为在C中没有办法告诉编译器预期的结果是什么。例如,你将如何添加这样的2个对象:
struct ss {
char *str;
};
答案 1 :(得分:3)
因为您无法在结构上定义算术运算。它们不是数字,也不是字符串,也不是浮点数,也不是任何可计算的数字。如果您的结构是一些个人数据的列表,如:
struct person {
int age;
char name[200];
int zipcode;
int sex;
whatever_t whatever;
} Mary, Ivan;
那你怎么定义Mary + Ivan呢?
编辑:
如果你想在下面添加位,你可以创建一个char数组,然后在其中创建memcpy
int size = sizeof (struct person);
char arr[size];
memcpy(arr, &person, size);
然后在内部添加另一个你以相同方式投射的结构。
答案 2 :(得分:1)
是的,我们可以。我们应该只使用另一种技术。
因为cnicutar很伤心为什么我们不能告诉C编译器如何使用uperator +
来构造结构。基线是complie不知道这种操作会产生什么结果。存在支持运算符重载的语言(C ++ / C#),但是对于这种情况,我们必须使用一些设计方法,因为C不是其中之一,所以我们必须为该操作创建方法。
因此我们可以写c = d + e
代替MyStructMath_add(d,e)
。
自己实现你对这种操作的期望逻辑。