在C中一起添加两种不同类型会发生什么?

时间:2015-02-27 02:59:06

标签: c types type-conversion

给出以下代码:

int foo = 5;
int *foo_ptr = &foo;
return foo_ptr + foo;

返回类型是指针还是int?更一般地说,编译器在将不同类型添加到一起时会做什么?

1 个答案:

答案 0 :(得分:2)

在C中,两种不同数字类型的总和涉及首先提升参数,以便类型相同然后添加。精确的算法在C11标准的§6.3.1.8“常用算术转换”中描述,您可以在cppreference上找到摘要(C ++和C标准在这一点上是相同的。)基本上,算法是选择两种类型中较宽的浮点类型,或者如果两者都不是浮点,则最窄的整数类型至少与int一样宽,这是两种类型的超集。

向指针p + ii + p添加整数与&p[i](或&i[p]相同)。计算是:

&(char*)p + i * (sizeof *p)

如果pvoid*,那是不可能的。