c语言 const 关键字和指针结合

#include <stdio.h>
#include <stdlib.h>

int main()
{
    //printf("Hello world!
");
    char a[] = "Hello";
    char b[] = "World";
    const char *p1 = a;
    char *const p2 = a;     //创建指针 p2 的时候就需要初始化,如果声明(或定义)之后再对其赋值会出现错误
    char const *p3 = a;

    //p1[0] = 'X';      //error, read-only location *p1
    p1 = b;             //No error when compiled
    printf("%c
", *p1);

    p2[0] = 'X';        //No error
    //p2 = b;           //error, read-only variable p2
    printf("%c
", *p2);

    p3 = b;
    //p3[0] = 'X';        //error, read-only location *p3
    printf("%c
", *p3);

    /*
    a[0] = 'X';
    printf("%s
", a);
    printf("%c
", *p1);
    //p2 = b;       //error: assignment of read-only variable 'p2'
    p2[0] = 'X';
    printf("%s
", a);
    //printf("")
    //p1[0] = 'H';   //这一句会出现编译错误
    a[0] = 'H';     //这一句不会出现错误
    printf("%s
", a);
    return 0;
    */
    return 0;
}


/*
总结:
const char * 与 char const *是一样的效果,即指针指向的内容是只读的
char *const 表示指针的内容是只读的,即指针指向的位置是不可修改的,但是指针指向的内存是可读可写的
const char *const pointer 兼有上面两种,即指针指向的位置不可修改,并且指针指向的内容也不能修改
char *const const pointer 与 const char *const pointer 效果相同
主要是看const关键字修饰的是什么
*/

原文地址:https://www.cnblogs.com/rocklee25/p/6533300.html