以字符串为参数的 printf

Printf with strings as arguments

考虑以下因素:

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

以上printf语句的输出为"rogramming"。我似乎无法弄清楚如何获得此输出。

因为字符是整数的一种形式。

    abc + abc[3] - abc[4]
==> abc + 'r' - 'o'
==> abc + 3

因此您从索引 3 开始打印字符串 abc。

abc 是一个数组。在表达式中使用时,在大多数情况下,它会转换为指向其第一个元素的指针。 abc[3]char'r'abc[4]'o'abc[3] - abc[4] = 'r' - 'o' = 3abc + 3 = &abc[3].
因此,表达式 abc + abc[3] - abc[4] 相当于指向字符串 "C Programming".

的第 3rd 个字符的指针