数字字面量的存储问题

看到一种说法除了字符串字面量存储在常量区,其他的字面量一般会称为立即数被包含在程序生成的代码中。

但是这样一段代码 printf("%f\n", 5)
用gcc编译器的时候会输出0,用vc出现错误(因为越界访问)。

看到一种说法,假设能越界访问,因为其放在静态区,前面补0,运用double计算以后是一个非常小的值,等于0。很有道理,但是按照大众说法,内存划分五类,5为什么不放在常量区呢。
而且五个区的话静态常量放在哪个区。
感觉一种常量区与全局区(静态区)是一个区而的说法更可行,符合实际啊。

没有C币,恳请赐教,大家共同讨论进步,多谢。

字符串是以ASCII字符NUL结尾的字符序列。ASCII字符NUL表示为\0.字符串通常存储在数组或者从堆上分配的内存中。不过,并非所有的字符数组都是字符串,字符数组可能没有NUL字符。字符数组也用来表示布尔值等小的整数单元,以节省内存空间。
C中有两种类型的字符串:
单字节字符串
由char数据类型组成的序列
宽字符串
由wchar_t数据类型组成的序列
wchar_t数据类型用来表示宽字符,要么是16位宽,要么是32位宽。这两种字符串都以NUL结尾。可以在string.h中找到单字节字符串函数,而在wchar.h中找到宽字符串函数。宽字符主要用于非拉丁字符集,对于支持外语的应用程序很有用,
字符串的长度是字符串中除了NUL字符外的字符数。为字符串分配内存的时候,要记住为所有的字符加上NUL字符分配足够的空间。
NULL和NUL不一样。NULL用来表示特殊的指针,通常定义为((void*)0),而NUL是一个char,定义为\0,两者不能混用!
字符常量是单引号引起来的字符序列。字符常量通常由一个字符组成,也可以包含多个字符,比如转义字符。在C中,它们的类型是int,如下所示:
[cpp] view plain copy 在CODE上查看代码片派生到我的代码片
printf("%d\n",sizeof(char));

printf("%d\n",sizeof('A'));

//output

//1

//4