如何解释这个C程序的输出?

use*_*893 -7 c

main() {
  printf("AAA"+2);
  printf ("%c","A"+printf(" B")+printf ("C "));
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我它的输出是什么以及它是如何产生的?

Ed *_*eal 6

第1行

 printf("AAA"+2);
Run Code Online (Sandbox Code Playgroud)

"AAA"是一个包含四个字符的数组(3 A和null).因此将从索引2开始打印数组.即"A"

第2行:

 printf ("%c","A"+printf(" B")+printf ("C "));
Run Code Online (Sandbox Code Playgroud)

把它分开

 printf(" B")
Run Code Online (Sandbox Code Playgroud)

将打印"B"并返回2(根据手册页)

 printf("C ")
Run Code Online (Sandbox Code Playgroud)

将打印"C"并返回2

所以字符串"A"是一个包含2个字符的数组(A和null).

但得到("A"+ 2)+ 2)并且2超出了字符串的范围.

所以这个位是未定义的