常量,字符串常量

来源:互联网 发布:淘宝福袋是死人衣服吗 编辑:程序博客网 时间:2024/04/26 04:52
http://bbs.csdn.net/topics/390629884
http://blog.csdn.net/flyupliu/article/details/6167358


对于普通变量常量:"常量折叠"是 就是在编译器进行语法分析的时候,将常量表达式计算求值,并用求
得的值来替换表达式,放入常量表。可以算作一种编译优化
#include<stdio.h>
void main()
{
const int e = 2;
int* w = (int*)&e; //
*w=3;
printf("%d  %d",*w,e);
}
输出 3  2
我只是改了这个地址内容,但是e还是2,
因为编译器在优化的过程中,会把碰见的const全部以内容替换掉(跟宏似的: #define pi 3.1415,用到
pi时就用3.1415代替),这个出现在预编译阶段;但是在运行阶段,它的内存里存的东西确实改变了!!!


所有的字符窜常量都被放在静态内存区
因为字符串常量很少需要修改,放在静态内存区会提高效率
字符串常量,之所以称之为常量,因为它可一看作是一个没有命名的字符串且为常量,存放在静态数据
区这里说的静态数据区,是相对于堆、栈等动态数据区而言的。静态数据区存放的是全局变量和静态变
量,从这一点上来说,字符串常量又可以称之为一个无名的静态变量
#include <stdio.h>
char *returnStr()
{
char *p="hello world!";
return p;
}
int main()
{
char *str=NULL;//一定要初始化,好习惯
str=returnStr();
printf("%s/n", str);
return 0;
}