• 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放最前面修饰,因为这样不能变的是当下地址所指向的变量;而我的数组元素的地址是可以指向其他地方的,即我可以改变我的地址值,而不能改变地址指向的变量值。从而,我通过改变地址的值,来指向一个新的变量值。总的来说,就是要把数组的地址值变为常量,达到不能修改的效果。

  • 相关阅读:
    数据绑定控件的上下文Container dodo
    jquery的调试利器:Firebug使用详解 dodo
    Scrum中的角色 dodo
    jquery easyui datagrid的增加,修改,删除 dodo
    计划扑克(Planning Poker) dodo
    windows2003 IIS 服务启动失败,提示‘另一个程序正在使用此文件,进程无法访问',解决方法 dodo
    控件包含代码块(即 <% ... %>),因此无法修改控件集合 dodo
    AppendFormat System.FormatException: 输入字符串的格式不正确 dodo
    Scrum中的燃烧曲线(Burndown Chart) dodo
    在类中获取、使用当前页面 Page 对象的引用 dodo
  • 原文地址:https://www.cnblogs.com/xsy123/p/13405605.html
Copyright © 2020-2023  润新知