在数组指针中添加和减去元素

Rus*_*kar 3 c c++ arrays pointers

我不小心偶然发现了这个问题,该问题说找到以下代码的输出 -

char abc[14] = "C Programming"; 
printf("%s", abc + abc[3] - abc[4]);
Run Code Online (Sandbox Code Playgroud)

我真的不明白输出是怎么来的 - rogamming有人可以解释一下这个吗?

bol*_*lov 5

它非常微妙,但代码表现出不确定的行为.这是因为首先完成添加,导致指针超出边界abc,这是未定义的行为,即使它没有被解除引用."正确"的方法是首先进行减法.

char abc[14] = "C Programming"; 
printf("%s", abc + (abc[3] - abc[4]));
Run Code Online (Sandbox Code Playgroud)

即使这样,结果也不会一成不变,因为不能保证ASCII编码用于字符.但由于ASCII无处不在,我们将忽略这一点.

其他答案解释了代码背后的黑魔法,所以我在此不再重复.