char * const p; char const * p ;const char *p这三个有什么区别
时间: 2023-09-16 12:06:03 浏览: 50
### 回答1:
这三个声明中的星号位置不同,因此它们的含义也不同:
1. `char * const p`:这表示`p`是一个指向`char`类型的常量指针,即指针本身是不可变的,但是指针所指向的内存可以被修改。
2. `char const * p`:这表示`p`是一个指向`const char`类型的指针,即指针所指向的内存是不可修改的,但是指针本身可以被修改。
3. `const char *p`:这也表示`p`是一个指向`const char`类型的指针,与第二个声明相同,即指针所指向的内存是不可修改的,但是指针本身可以被修改。
简而言之,第一个声明中指针本身是不可修改的,但所指向的内存可以被修改,而第二个和第三个声明中指针本身可以被修改,但所指向的内存是不可修改的。
### 回答2:
这三个表达式都涉及指向字符类型的常量指针,但它们的类型修饰符的顺序不同,因此有一些细微差别:
1. "char * const p":其中"const"位于"*"之前,表示p是一个指向字符类型的常量指针。这意味着指针p的值不能更改,即它始终指向相同的内存地址;但可以更改p所指向的内存中存储的字符值。
2. "char const * p":其中"const"位于"*"之后,表示p是一个指向常量字符类型的指针。这意味着指针p可以指向不同的内存地址,但无法通过p来修改所指向的内存中的字符值。
3. "const char * p":与上述表达式类似,"const"位于"*"之后,表示p也是一个指向常量字符类型的指针。这两种格式相当于是"char const * p"的等价形式。
综上所述,虽然这三种类型修饰符的顺序不同,但均指向字符类型的常量指针。唯一的差别在于,第一种形式限制了指针的值不可更改,而第二种和第三种形式限制了所指向内存中字符的值不可更改。
### 回答3:
这三个声明中的关键字的先后顺序代表了不同的指针类型。
1. char * const p:表示指针p是一个常量指针,即指针p的指向地址是固定的,不能改变。但是可以通过指针p来修改所指向的内容。
2. char const * p:表示指针p指向一个常量字符,即所指向的字符是不可修改的,但是指针p的指向地址可以改变。
3. const char * p:与第二个声明相同,表示指针p指向一个常量字符,所指向的字符是不可修改的,但是指针p的指向地址可以改变。
总结起来,第一个声明限制了指针p的指向地址,但允许修改所指向的内容;而后两个声明限制了所指向的内容不可修改,但允许改变指针p的指向地址。