最近在搞项目,遇到了些问题,就这些问题,简单的记录一下。转载请注明作者。
const关键字
顾名思义const就是常量的意思,初始化之后,就无法改变const修饰的变量的值。
const char type_num=1; char cosnt type_num=1;
以上都可以声明一个变量type_num,且之后不能改变。
const 指针数据
这里主要分两种情况讨论:先来看代码
const char *type_num[] = {"13","14","15","4","5","6","7","9","10","11", "12","1","20","19","21","22","24","25","26"};
这种情况下定义的数组,是可以改变其中任何一个元素的值的。
type_num[1]="111"; printf("%s", type_num[1]);
可以测试以上代码并没有报错,这是因为当我们进行修改的时候,修改的是 type_num[1]这个指针地址,而不是指针地址所指向的变量。就是说,我们之前的地址仍然存放的是 “14” 这个元素。在C语言中,“111”这个字符串的地址赋值给了type_num[1],从而type_num[1]指向了另外一个地址“111”。
而当执行以下代码的时候,是会出现错误的;
char *const type_num[] = {"13","14","15","4","5","6","7","9","10","11", "12","1","20","19","21","22","24","25","26"};
这里的意思是我的数组存储的地址(首个字符地址)就是常量,当我再执行赋值操作的时候,即是修改第二个元素的地址,这个时候就会出现错误了。
再来个变量的例子:
const int *p=1; int m=3; *p=6;//这样会报错,不能修改变量值 p=&m;//这样不会报错,因为地址值可以改变。 //反过来 int* const p=1; int m=3; *p=6;//这样不会报错,能修改变量值 p=&m;//这样会报错,因为地址值不可以改变。
总结
当我们,定义一个不可修改的字符串数组的时候,需要用const来修饰字符串数组的地址即,char *const type_num[]。不能把const放最前面修饰,因为这样不能变的是当下地址所指向的变量;而我的数组元素的地址是可以指向其他地方的,即我可以改变我的地址值,而不能改变地址指向的变量值。从而,我通过改变地址的值,来指向一个新的变量值。总的来说,就是要把数组的地址值变为常量,达到不能修改的效果。