以下输出

时间:2018-12-09 17:22:05

标签: c

代码段

int main(){
    printf(5 + "GeeksQuiz"); 
    return 0;    
}

输出就是测验

您能告诉我此输出如何发送。 背后的逻辑是什么?

1 个答案:

答案 0 :(得分:0)

  1. 加法是可交换的。 a + b等于b + a
  2. 向指针添加整数将遵循指针算法。将整数添加到指针会使其增加与整数计数一样多的元素。因此(int*)a + b等于(int*)((uintptr_t)a + b * sizeof(int))
  3. sizeof(char)始终等于1。
  4. "GeeksQuiz"string literalstrlen("GeeksQuiz")等于9。考虑到以字符串结尾的空字节,字面量的类型为char[10]。它是由10个字符组成的数组,内容为{'G','e','e','k','s','Q','u','i','z','\0'}
  5. C规则说,在大多数情况下,类型数组都会转换为指向该数组第一个元素的指针。发生这种情况:(char[])"GeeksQuiz"被转换为指向字符串中第一个字符char*的{​​{1}}指针。
  6. 'G'5 + "GeeksQuiz"转换为指向第一个字符的指针。然后,该指针将增加5。因此,"GeeksQuiz"的结果将是5 + "GeeksQuiz"指针,该指针指向字符串文字中的字符char*
  7. 'Q'打印传递给它的空终止字符串作为第一个字符,但以printf开头的转换除外,此处不适用。
  8. %函数传递的是指向printf字符串文字内的字母'Q'的指针的地址。
  9. "GeeksQuiz"使指针递增,直到找到终止为空字节的字符串。因此它将打印printf,因为在{'Q','u','i','z'}字符之后它将找到空字节。