#include <stdio.h>
char* func ();
int main ( )
{
char *p;
p=func();
printf("%c",*p);
}
char* func()
{
return "hello";
}
Run Code Online (Sandbox Code Playgroud)
在这里,printf打印“ h”,这意味着创建了指向“ hello”的指针,并且字符串“ hello”存储在内存中。同样,在printf(“%d”,5)中,'5'是否存储在内存中?
您的问题在很大程度上取决于平台,但是大多数理智的编译器不应5将代码存储在代码的任何数据部分中,只能以只读方式或其他方式存储-应该在printf调用之前将其简单地压入堆栈。
编辑:实际上,我刚刚检查了一下,GCC做了一些更有趣的事情:

由于数量众多,它完全避免了在64位计算机上的堆栈,并使用了直接寄存器。它仍然不存储5任何内容,而是存储在操作码本身中。