代码段
int main(){
printf(5 + "GeeksQuiz");
return 0;
}
输出就是测验
您能告诉我此输出如何发送。 背后的逻辑是什么?
答案 0 :(得分:0)
a + b
等于b + a
。(int*)a + b
等于(int*)((uintptr_t)a + b * sizeof(int))
sizeof(char)
始终等于1。"GeeksQuiz"
是string literal。 strlen("GeeksQuiz")
等于9。考虑到以字符串结尾的空字节,字面量的类型为char[10]
。它是由10个字符组成的数组,内容为{'G','e','e','k','s','Q','u','i','z','\0'}
。(char[])"GeeksQuiz"
被转换为指向字符串中第一个字符char*
的{{1}}指针。'G'
:5 + "GeeksQuiz"
转换为指向第一个字符的指针。然后,该指针将增加5。因此,"GeeksQuiz"
的结果将是5 + "GeeksQuiz"
指针,该指针指向字符串文字中的字符char*
。'Q'
打印传递给它的空终止字符串作为第一个字符,但以printf
开头的转换除外,此处不适用。%
函数传递的是指向printf
字符串文字内的字母'Q'
的指针的地址。"GeeksQuiz"
使指针递增,直到找到终止为空字节的字符串。因此它将打印printf
,因为在{'Q','u','i','z'}
字符之后它将找到空字节。