const和指针数组

最近在搞项目,遇到了些问题,就这些问题,简单的记录一下。转载请注明作者。

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=1int m=3*p=6//这样会报错,不能修改变量值
p=&m;//这样不会报错,因为地址值可以改变。
//反过来
int* const p=1int m=3*p=6//这样不会报错,能修改变量值
p=&m;//这样会报错,因为地址值不可以改变。

 

总结

当我们,定义一个不可修改的字符串数组的时候,需要用const来修饰字符串数组的地址即,char *const type_num[]。不能把const放最前面修饰,因为这样不能变的是当下地址所指向的变量;而我的数组元素的地址是可以指向其他地方的,即我可以改变我的地址值,而不能改变地址指向的变量值。从而,我通过改变地址的值,来指向一个新的变量值。总的来说,就是要把数组的地址值变为常量,达到不能修改的效果。

 

posted @ 2020-07-30 18:28  Respirar  阅读(801)  评论(0编辑  收藏  举报