2015-11-04 158 views
-5

请说明输出。我不明白该计划的输出。输出如何作为合作伙伴

void main(){ 
    char c[]="PATHPARTNER"; 
    char *p=c; 
    printf("%s",p+p[7]-p[0]); 
} 
+0

寻求调试帮助的问题(“为什么这个代码不工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者无益。请参阅:如何创建最小,完整和可验证示例。 – Olaf

+0

SO不是“解释我的代码”服务。 – Olaf

回答

0

在你的代码,p+p[7]-p[0]是一样p+ 'T'-'P'。读取数组索引。

现在,关于指针运算(加法),让我们来看看C11规范,章§6.5.6

时具有整数类型的表达式中加上或减去从指针, 结果具有指针操作数的类型。如果指针操作数指向数组对象的元素,并且该数组足够大,则结果指向原始元素的偏移量 ,从而使得结果数组元素和原始数组元素的下标之差等于整数表达式。 [...]

现在,下面的ASCII values,我相信你可以计算其余部分。

FWIW,void main()最好至少为int main(void)

+0

谢谢你...... :) 我在想这个程序很多...这么简单... –