• 指针常量


    char *string="abc" 中,是将string指向常量"abc",如果执行以下方法会报内存不能为written的错误:

    void change(char *s){

       *s='A';

    }

    解决方法是定义string为字符数组:

    char string[]="abc";

    关于const的具体作用


    A。const最经常的用法

    1.为了防止传递的函数参数不被修改,在调用函数的形参中用const关键字.

    int FindNum(const int array[], int num, int count){

       ...

    }
    编译器会把array[]当作常量数据的数组看待。所以,假如你不小心给数组赋值,那么编译器就会报错了

    2.const可以用来创建数组常量、指针常量、指向常量的指针等:
                 const char ch = 'a';
                 const int a[5] = {1, 2, 3, 4, 5};  
                 const int *p = a;              //a是一个数组的首地址.p是指向常量的指针
                 int * const p = a;             //a是一个数组的首地址.p是指针常量;
                 const int * const p = a;    //a是一个数组的首地址。p是指向常量的指针常量

     ——const int *p = a;       //p是指向常量的指针,因此,不可以通过给指针赋值来改变数组
                                         //中的数据,例如:
                                         // *p = 10;       /*错误*/
                                         // *(p + 2) = 1;  /*错误*/

    ——int * const p = a;      //p是指针常量,我们知道,指针是指向了一个数组的首地址,  

                                         //那么,它的位置就不可以改变了。但可以通过指针改变数组中的数据

                                         //  *p = 2;          /*可以*/
                                         //  *(p+1) = 10;     /*可以*/
                                         //  p++;             /*不可以*/

    B。const并不会阻止参数的修改

    在函数参数中用了const就一定不可以改变是错误的理解,因为,它并不阻止参数的修改,下面举个简单的例子来阐述一下

    int main(void)
    {
        char str[] = "The C programme";

        Change(str);
        printf(str);
                        
        system("Pause");
        return 0;
    }
    void ChangeStr(const char *String)
    {
        char *Source = (char *)String;
        while (*Source)
        {
            *Source = toupper(*Source);
            Source++;
        }
    }

    程序把字符串中的每个字符都转换成大写字母了。因为*String把地址给了*Source,而*Source的值的改变编译器并不干涉,可能有的编译器会发出警告之类。上面的程序只是为了说明const并不会阻止

  • 相关阅读:
    SQL 语法总结
    终于开始用github了
    前端开发第一阶段总结
    windows系统快捷操作の高级篇
    windows系统快捷操作の进阶篇
    windows系统快捷操作の基础篇
    安装使用ubuntu问题汇总
    十进制转任意进制
    任意进制转10进制
    爬取妹子图(requests + BeautifulSoup)
  • 原文地址:https://www.cnblogs.com/children/p/2347240.html
Copyright © 2020-2023  润新知