c - 为什么这会做任何事情?

标签 c

#include <stdio.h>
void littledot(){}//must use C, not C++

int main() {
   littledot(568,76,105,84,116,76,101,68,111,84);
   printf("%c%c%c%c%c%c%c%c%c\n");

   getchar();
   return 0;
}

以上代码产生结果“LiTtLeDoT”。为什么要这样做?为什么 568 至关重要?

最佳答案

这因平台而异并且是 UB(实现可以做任何它想做的事*),但在 littledot() 返回并且 printf 从堆栈打印这些参数后,littledot() 的参数可能仍在堆栈中。

永远不要依赖这个!


*真的是什么。 Afaik 一个古老版本的 GCC 在遇到某些行为未定义的行为时启动了一个视频游戏。

关于c - 为什么这会做任何事情?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7622559/

相关文章:

c - 程序在 Dev-C++ 中关闭

c - 使用 memcpy 将缓冲区中的数据存储到结构中

c - c中的数组名到底是什么?

c - typedef 内部如何工作?

C 编程段错误 : 11 Thread issues

c - 我在 C 中收到 "conflicting types"错误

c - 为什么 scanf 不保存我请求的 "size of an array ' n' "并将其传递到 for 循环?

c - 除了turbo c++之外,还有什么更好、更合适的编译器来运行c中的基本图形程序呢?

c - 有没有办法读取EOF之后的高清数据?

c - 为什么pthreads在c中顺序执行