有什么区别:

char * const 

and

const char *

当前回答

区别在于const char *是指向const char类型的指针,而char * const是指向char类型的常量指针。

首先,被指向的值不能改变,但指针可以改变。第二,被指向的值可以改变,但指针不能改变(类似于引用)。

还有一个

const char * const

它是一个指向常量char的常量指针(因此它的任何内容都不能更改)。

注意:

以下两种形式是等价的:

const char *

and

char const *

具体的原因在c++标准中有描述,但重要的是要注意并避免混淆。我知道一些编码标准更喜欢:

char const

over

const char

(带或不带指针),这样const元素的位置与使用指针const时相同。

其他回答

Const char*是一个指向常量字符的指针 Char * const是一个指向字符的常量指针 Const char* Const是一个指向常量字符的常量指针

这里x基本上是一个字符指针,指向一个常数值 Char * const x是一个字符指针,它是一个常量,但是它指向的位置可以改变。 Const char* Const x是1和2的组合,意味着它是一个指向常量值的常量字符指针。 Const *char x将导致编译器错误。它不能被宣布。 Char const * x等于点1。

经验法则是,如果const是var名称,那么指针将是常量,但指向的位置可以改变,否则指针将指向一个常量位置,指针可以指向另一个位置,但指向的位置内容不能改变。

许多答案提供了具体的技术,经验法则等,以理解变量声明的特殊实例。但是有一个通用的技巧来理解任何声明:

顺时针/螺旋规则

A)

const char *a;

根据顺时针/螺旋规则,a是指向常量字符的指针。这意味着字符是不变的,但指针可以改变。即a = "其他字符串";没问题,但[2]= 'c';将无法编译

B)

char * const a;

根据规则,a是指向字符的const指针。例如,你可以做一个[2]= 'c';但是你不能用a = "other string";

我猜你指的是const char *和char * const。

第一个const char *是一个指向常量字符的指针。指针本身是可变的。

第二个,char * const是一个指向字符的常量指针。指针不能改变,但它所指向的字符可以。

然后是const char * const,指针和字符不能改变。

这里是一个详细的解释与代码

/*const char * p;
char * const p; 
const char * const p;*/ // these are the three conditions,

// const char *p;const char * const p; pointer value cannot be changed

// char * const p; pointer address cannot be changed

// const char * const p; both cannot be changed.

#include<stdio.h>

/*int main()
{
    const char * p; // value cannot be changed
    char z;
    //*p = 'c'; // this will not work
    p = &z;
    printf(" %c\n",*p);
    return 0;
}*/

/*int main()
{
    char * const p; // address cannot be changed
    char z;
    *p = 'c'; 
    //p = &z;   // this will not work
    printf(" %c\n",*p);
    return 0;
}*/



/*int main()
{
    const char * const p; // both address and value cannot be changed
    char z;
    *p = 'c'; // this will not work
    p = &z; // this will not work
    printf(" %c\n",*p);
    return 0;
}*/