指针常量

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并不会阻止

原文地址:https://www.cnblogs.com/children/p/2347240.html