问题描述
#include <stdio.h>
char* func ();
int main ( )
{
char *p;
p=func();
printf("%c",*p);
}
char* func()
{
return "hello";
}
下面,printf的打印h的,这意味着以你好,创建一个指针和该字符串你好被存储在存储器中。
同样地,在输出(%d个,5),是5存储在存储器
Here, printf prints "h", which means that a pointer to "hello" is created and that the string "hello" is stored in memory.Similarly, in printf ( "%d", 5 ), is '5' stored in the memory?
推荐答案
您的问题是非常依赖于平台,但大多数理智的编译器不应该存储 5
中的任何数据段您code,只有或阅读 - 它应该被简单地推的printf
调用之前堆栈上的
Your question is extremely platform dependent, but most sane compilers shouldn't store 5
in any data section of your code, read only or otherwise -- it should be simply pushed on the stack before the printf
call.
编辑:我其实只是检查,GCC做更有趣的东西:
I actually just checked, and GCC does something even more interesting:
这完全避免了64位机上的堆栈,并使用可用的,因为众多的直寄存器。它仍然不存储 5
任何地方,但在OP code本身。
It avoids the stack entirely on a 64-bit machine and uses straight registers because of the multitude available. It still doesn't store the 5
anywhere but in the opcode itself.
这篇关于在的printf(QUOT;%D&QUOT,5);被存储在存储器5?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!