关于c语言const修饰符对指针变量的修饰问题

在看同事的jni幻灯片的时候,看到了const 指针,就顺便聊了下,一直都觉得 带 const 修饰符的都应该 在声明的时候赋值,声明之后,再赋值是不过语法检查的。

结果发现,对于指针来说,情况并不是我想的那样。

对于char *来说,const 未修饰 变量名称时候, 赋值都是在可以后面随意改动的,也就是指针可以 重新任意赋值,但是赋值后的内存区域是不能修改的,但是若 const 是在修饰 变量名称,那么跟 普通类型变量都一样, 需要声明的时候赋值,否则,根本过不了语法检查。

代码如下:

#include <stdio.h>
int main()
{
    const char *a  = "xxxxxx";
    char const  *a1  = "xxxxxx";
    char * const c = "1111111";
    const int b = 0;

    a = "aXXXXX";
    //c = "yyyyyy";
    *a1 = '1';
    * a = '2';
    b = 3;
    printf("str a = %s\n", a);
    printf("str a1 = %s\n", a1);
    printf("str c = %s\n", c);
    printf("b = %d\n", b);
    return 0;
}