C 以下内容的输出
代码片段C 以下内容的输出,c,C,代码片段 int main(){ printf(5 + "GeeksQuiz"); return 0; } 输出是测验 你能告诉我这个输出是怎么来的吗。 背后的逻辑是什么 加法是交换的a+b等于b+a 将整数添加到指针会按照指针算术递增。将整数添加到指针时,指针的增量为整数计数的元素数。所以(int*)a+b等于(int*)((uintptpr_t)a+b*sizeof(int)) sizeof(char)始终等于1 “Geeksquick”是一个有趣的游戏strle
int main(){
printf(5 + "GeeksQuiz");
return 0;
}
输出是测验
你能告诉我这个输出是怎么来的吗。
背后的逻辑是什么
b+a
(int*)a+b
等于(int*)((uintptpr_t)a+b*sizeof(int))
sizeof(char)
始终等于1“Geeksquick”
是一个有趣的游戏strlen(“geeksquick”)
等于9。考虑到以空字节结尾的字符串,文本的类型是char[10]
。它是一个由10个字符组成的数组,内容{'G','e','e','k','s','Q','u','i','z','0'}
(char[])“geeksquick”
被转换成指向字符串中第一个字符'G'
的char*
指针5+“geeksquick”
:将“geeksquick”
转换为指向第一个字符的指针。然后该指针递增5。因此5+“geeksquick”
的结果将是char*
指针,该指针将指向字符串文本中的字符'Q'
printf
打印作为第一个字符传递给它的以null结尾的字符串,但以%
开头的转换除外,此处不适用printf
函数传递指针的地址,该指针指向“geeksquick”
字符串文本中的字母'Q'
printf
递增指针,直到找到以空字节结尾的字符串。因此,它将打印{'Q'、'u'、'i'、'z'}
,因为在z
字符之后,它将找到空字节printf
打印*char
类型的指针。添加5将打印指针+5。如果您将使用6,它将打印uiz。如果您使用的整数大于strlen()
则您的应用程序将写无意义的内容。