为什么我们不能对C中的结构进行算术运算?

时间:2012-08-13 15:38:13

标签: c

struct a{
int a;
char b;
} c,d={1,2},e;

c=d //allowed
c=d+e  //not allowed

分配工作,因为编译器生成汇编代码来移动字节。 所以可以为其他运营商做同样的事情。 那么为什么C没有这个功能呢?

< ===========>

根据要求,一些功能可以.. 1.在添加大量(超过长)的同时,我们不必使用循环来长时间添加它。

c = a + b

会奏效。

  1. 转移阵列。

  2. 乘法。

  3. 所以我们不必编写额外的代码,因为编译器可以生成汇编代码。

3 个答案:

答案 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)

自己实现你对这种操作的期望逻辑。