【C】常量指针和指针常量的区别

    常量指针,就是指向常量的指针,关键字 const 出现在 * 左边,表示指针所指向的地址的内容是不可修改的,但指针自身可变。

    指针常量,就是指针内容的常量,关键字 const 出现在 * 右边,表示指针自身不可变,但其指向的地址的内容是可以被修改的。

    比如:

            常量指针: const char *ptr = “hello”     ptr可改变,*ptr不可改变

            常量指针: char const *ptr = “hello”     ptr可改变,*ptr不可改变

            指针常量: char * const ptr = “hello”    ptr不可改变,*ptr可改变



    代码一

    #include <stdio.h>
    int main(){
        char str1[] = {"Hello"};
        char str2[] = {"Hello World"};
        char * const ptr1 =str1 ;
        //指针常量--指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化
    
        ptr1 =str2; //错误 因为这是一个常量指针,改变指向的地址了
    
        printf("%s \n", ptr1);
        return 0;
    }
    
    // 编译错误 error: assignment of read-only variable ‘ptr1’

    代码二

    #include <stdio.h>
    int main()
    {
        char str1[] ={"Hello"};
        char str2[] ={"Hello World"};
        char * const ptr1 =str1 ;
        //指针常量--指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化
    
        *ptr1 ='A';// 正确 因为指向的地址的内容是可以变化的
    
        printf("%s \n", ptr1);
        return 0;
    }
    //输出 Aello

    代码三

    #include <stdio.h>
    int main()
    {
        char str1[] ={"Hello"};
        char str2[] ={"Hello World"};
        const char * ptr1 =str1 ;
        //常量指针--指向字符串常量,所指向的字符串内容不能变,但是指向的地址可以变化
    
       ptr1=str2;// 正确 因为指向的地址是可以变化的
    
       printf("%s \n", ptr1);
        return 0;
    }
    //输出 Hello World

    代码四

    #include <stdio.h>
    int main()
    {
        char str1[] ={"Hello"};
        char str2[] ={"Hello World"};
        const char * ptr1 =str1 ;
        //常量指针--指向字符串常量,所指向的字符串内容不能变,但是指向的地址可以变化
    
       *ptr1 ='A'; // 错误 因为指向的地址是内容是不可以变化的
    
       printf("%s \n", ptr1);
        return 0;
    }
    // 编译错误 error: assignment of read-only location

    参考:

    1. 常量指针 和 指针常量
    2. 常量指针与指针常量


    本博客所有文章如无特别注明均为原创。
    复制或转载请以超链接形式注明转自枫芸志,原文地址《【C】常量指针和指针常量的区别
    标签:
    分享:

还没有人抢沙发呢~

无觅相关文章插件,快速提升流量