qq1242009750 发表于 2016-11-23 18:58:42

char const *p 的问题

intmain()
{
        const char i = ‘i;
       
        char *const p = &i;
       
        *p = 'A';

        printf("%c ",*p);

        return 0;
}
                输出的是   'A'

我就是想问一下   这里我定义了一个常量的字符i,为什么可以用指针来改变呢???

倾天 发表于 2016-11-23 19:48:58

char const *p 表示的是p这个指针不能被改变,不能被赋值,不能指向其他的值
const char *p表示的才是p指向的内容不能被改变

四十二 发表于 2016-11-23 20:23:40

本帖最后由 四十二 于 2016-11-23 20:51 编辑

倾天 发表于 2016-11-23 19:48
char const *p 表示的是p这个指针不能被改变,不能被赋值,不能指向其他的值
const char *p表示的才是p指 ...

这两个应该是没区别吧兄弟


Bjarne在他的The C++ Programming Language里面给出过一个助记的方法:
把一个声明从右向左读。

char * const cp; ( * 读成 pointer to )
cp is a const pointer to char

const char * p;
p is a pointer to const char;

char const * p;
同上因为C++里面没有const*的运算符,所以const只能属于前面的类型。


C++标准规定,const关键字放在类型或变量名之前等价的。

图像识别专家 发表于 2016-11-23 20:37:30

我来说一下
const char *p    修饰的是*p不能赋值 可以修改指向的地址
cahr *const p    常指针修饰的是p只能复制不能修改地址

四十二 发表于 2016-11-23 20:55:03

本帖最后由 四十二 于 2016-11-23 20:56 编辑

其实我也不懂,不装逼了

仰望天上的光 发表于 2016-11-23 21:21:38

按我的理解
        const char i = ‘i';
       
        char *const p = &i;//这句不可能通过编译,你用的是什么编译器呢?

qq1242009750 发表于 2016-11-26 13:39:20

仰望天上的光 发表于 2016-11-23 21:21
按我的理解
        const char i = ‘i';
       


GCC

fc1735 发表于 2016-11-26 17:23:59

因為你用的是有指針的C語言
int main()
{
        const char i = ‘i'; //反编译后,其地址跟一般变数是在同一个段中,可想而知不会有什么你修改其值会中断程序并告诉你,权限不够不能修改之类的。通常,你无法在只知道地址的情况下,在程序中改变其值,这个作用只是当透过i告诉编译器这个地址时,你要修改其值会报错

        char *const p = &i; //一个常量指针,必须给初值(对一个常量不给初值是自找麻烦),当你修改其指向的地址的值时,编译器不会阻止你啊,他还要智能判断前面你已经定义为常量的i是你现在p所指向的吗

       上述如果没有给常量指针 p给初值,在之后用 p=&i 会报错,没办法通过编译。
       必须用修改第一个常量的方法修改常量指针,
       int* q=&p;
       *q=&i;

      或正规没有警告的写法
      char** q=&p;
      *q=&i;

   结论是所有你定义出来的常量,都可用指针的方式修改。      




        *p = 'A';

        printf("%c ",*p);

        return 0;
}

qq1242009750 发表于 2016-11-26 17:24:41

char const i = 'a';//const 表示不能变量名来修改内容,但是呢可以通过地址来修改他的内容

qq1242009750 发表于 2016-11-26 17:27:03

fc1735 发表于 2016-11-26 17:23
因為你用的是有指針的C語言
int main()
{


{:9_228:}
页: [1]
查看完整版本: char const *p 的问题