给出以下代码:
int foo = 5;
int *foo_ptr = &foo;
return foo_ptr + foo;
返回类型是指针还是int?更一般地说,编译器在将不同类型添加到一起时会做什么?
答案 0 :(得分:2)
在C中,两种不同数字类型的总和涉及首先提升参数,以便类型相同然后添加。精确的算法在C11标准的§6.3.1.8“常用算术转换”中描述,您可以在cppreference上找到摘要(C ++和C标准在这一点上是相同的。)基本上,算法是选择两种类型中较宽的浮点类型,或者如果两者都不是浮点,则最窄的整数类型至少与int
一样宽,这是两种类型的超集。
向指针p + i
或i + p
添加整数与&p[i]
(或&i[p]
相同)。计算是:
&(char*)p + i * (sizeof *p)
如果p
为void*
,那是不可能的。