留言与评论(共有 0 条评论) |
发布时间:2020-04-15 16:49:11
字符串常量最主要的好处是不可修改,其次还有占用内存少,易于维护。
形如“string const”,被双引号括起来的内容称为字符串常量。字符串常量具有两个性质,一是其中内容不可被修改,而是字符串常量属于静态存储类别,类似于静态局部变量,该字符串在整个生命周期只会被存储一次,即使函数被调用多次。双引号返回的是字符串的指针,指向存储该字符串的位置。
主要有数组和指针两种方式。
常量数组
const char str[] = "Please Pay attention to my taotiao, Thanks";
添加const 说明该字符串数组是内容不可变的,如果不添加const,则说明该字符串数组是内容可变的,但是变动的是该数组内容,并不是字符串常量本身。
指针
const char *p = "Please Pay attention to my taotiao, Thanks";
指针p指向的是该字符串常量的地址。
其实,这两种形式并不完全相同。函数运行前,字符串已经存储在静态存储区。函数被调用时,才给数组分配内存,将字符串的内容拷贝到数组中。因此此时多出一个字符串副本,一个在静态存储区,一个在数组中。
相对于指针,只会把字符串的地址赋值给指针,内存中还只有一个字符串,指针指向该字符串的位置。
总之,数组把静态存储区的字符串拷贝到数组中,而指针只把字符串的地址拷贝给指针,简言之,数组拷贝内容,指针拷贝地址。
#define MSG "Please Pay attention to my taotiao, Thanks"
const char *p = MSG;
常量就是就是值不能变化或者说值只读的量。
C语言中有两种形式的常量,宏定义和const常量。
我们定一个折扣discount为0.85:
#define DISCOUNT 0.85
宏定义是预处理,程序不会为它分配存储空间,编译器执行预处理的时候会把程序中遇到的所有DISCOUNT都替换为0.85。
我们定义const常量,格式为:
const float DISCOUNT 0.85f;
我们对比知道const常量俱有类型,这是和宏定义的不同之处;还有就是const常量在编译后存储在一个全局符号表中(或者静态数据存储区),其值只读无法修改。
常量作用就维护一个不能修改的变量。这样防止被人乱改,主要用于程序一个全局性质关键参数设置。比如你一个销售系统的折扣,你设置好了就不能随便更改。
还有就是一些数学上,物理学等一些常数直接记数字不是很方便就给它起个别名代替之。比如我们定义圆周率。
#define PI 3.1415926
注意:我们定义常量时候都是用的大写,这是编程届的一些需要墨守的成规。
如果楼主是因为爱好C编程,在学习或编程实战遇到这样的问题的话,建议楼主再可以把C语言的基础知识学扎实点。
C语言中的每种数据结构、变量、常量都有其应用范围,针对楼主提出的问题,如果编程中使用字符串常量,那我猜楼主的本意就是不想在程序运行中来修改这些常量,不论那本C教程中都对常量有描述,常量是在程序运行过程种不允许被修改的,这样做的好处:一是可以对一些重要数据进行保护,二是可以节省程序的内存开销。
如果楼主想修改字符串建议使用数组变量来存储,其实归根到底楼主还是要弄清楚变量和常量的本质区别,然后根据自己的实际需要来设计程序。
留言与评论(共有 0 条评论) |
全站搜索