谭浩强的C语言书很老旧。
int i=4;
过去 常量 4 要放到 常量区。
int i, 要分配 变量 存放单元。
然后 再 把 常量区的那个存4的单元里的4 赋给 i。
--
现在, int i=4;处理为 声明与初始化。int i, 要分配 变量 存放单元,接着初始化存值4。
这样,常量就不另占单元。
---
但是
char *p="abcd";
"abcd" -- 仍要放入常量区
char *p -- 指针占4个字节。
程序运行的数据段分为,初始化数据段,非初始化数据段,常量区。这里的常量指的是printf("I am a string\n");里面I am a string指的是常量,还有const int i = 4,这里的i也是常量,常量是只读的,不能在程序运行的时候进行修改的,而int i=4,这个内存是在初始化数据段分配的,你想改,程序里面可以让i = 5
把思路理清一下,int i=4的真正含义是什么,就是告诉一个整型变量的值为4,4不代表任何东西。说的不知道是否清楚,可以一起探讨
字符串常量占用内存
本例子只分配4字节内存。只有变量占内存。 书上说的是在运算过程中,数字常量占内存,不是在赋值的时候就占内存。
...int i=4 意思是把4放到i的内存地址里去··i就变成4了··只是占4个字节...