Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么它是常量指针而不是指向常量的指针? 在C++入门书中,对类型别名的解释有: typedef char *pstring; const pstring cstr = 0; // cstr is a constant pointer to char_C++_Pointers_Types_Alias - Fatal编程技术网

为什么它是常量指针而不是指向常量的指针? 在C++入门书中,对类型别名的解释有: typedef char *pstring; const pstring cstr = 0; // cstr is a constant pointer to char

为什么它是常量指针而不是指向常量的指针? 在C++入门书中,对类型别名的解释有: typedef char *pstring; const pstring cstr = 0; // cstr is a constant pointer to char,c++,pointers,types,alias,C++,Pointers,Types,Alias,他们说下面的解释是错误的: const char *cstr = 0; 然而,用typedef别名的原始含义替换它对我来说是有意义的 在没有类型别名的正常情况下,常量指针定义为: char *const cstr = 0; 为什么它是常量指针而不是常量指针 谁能解释清楚,因为这本书似乎没有太多的解释。2*3+1是7。但是,如果我做inti=3+1然后2*i它给出8?这个变量不应该替换为它的原始含义吗 这是因为2*3+1被解释为(2*3)+1,而2*i与2*(3+1)相同。这意味着不同的事情,

他们说下面的解释是错误的:

const char *cstr = 0;
然而,用typedef别名的原始含义替换它对我来说是有意义的

在没有类型别名的正常情况下,常量指针定义为:

char *const cstr = 0;
为什么它是常量指针而不是常量指针


谁能解释清楚,因为这本书似乎没有太多的解释。

2*3+1
是7。但是,如果我做
inti=3+1然后
2*i
它给出8?这个变量不应该替换为它的原始含义吗

这是因为
2*3+1
被解释为
(2*3)+1
,而
2*i
2*(3+1)
相同。这意味着不同的事情,结果也不同。当您给
3+1
一个名称时,当您使用该名称时,它不会将数字分解回
3+1
,以便只乘以3

const char*
不同于
const pstring
的原因非常相似<代码>常量字符*
被解释为
(常量字符)*
,即指向常量字符的指针。但是
const pstring
const(char*)
相同,即指向char的常量指针
pstring
本身就是一个完整的类型,当您执行
const pstring
时,它不会拆分
char*
以使
char
部分常量


注意:如果您确实定义了pstring char*,那么
const pstring
将与
const char*
相同,因为宏(
#define
s)仅被视为文本替换。

2*3+1
是7。但是,如果我做
inti=3+1然后
2*i
它给出8?这个变量不应该替换为它的原始含义吗

这是因为
2*3+1
被解释为
(2*3)+1
,而
2*i
2*(3+1)
相同。这意味着不同的事情,结果也不同。当您给
3+1
一个名称时,当您使用该名称时,它不会将数字分解回
3+1
,以便只乘以3

const char*
不同于
const pstring
的原因非常相似<代码>常量字符*
被解释为
(常量字符)*
,即指向常量字符的指针。但是
const pstring
const(char*)
相同,即指向char的常量指针
pstring
本身就是一个完整的类型,当您执行
const pstring
时,它不会拆分
char*
以使
char
部分常量



注意:如果您确实定义了pstring char*,那么
const pstring
将与
const char*
相同,因为宏(
#define
s)仅被视为文本替换。

const
绑定到其最左边的对象(除非
const
是第一个对象,在这种情况下,它将绑定到其直接右侧的对象)既然
pstring
是一个指针,
const pstring
绑定到指针。
2*3+1
是7。但是如果我做
int I=3+1;
然后
2*I
它给出了8,为什么不应该用它的原始含义替换变量呢?宗教问题警告,但我发现
const char*cstr=0;
可读性好。当我取消引用时,我只在事物的左边放星号。@immibis:如果这与这个问题有什么关系的话?这本书建议在变量名的左边使用它。例如
int*ptr=0,val=0;
这里ptr是指向int的指针,而val是整数变量。@RobertHarvey
const
binds到其直接左侧的对象(除非
const
是第一个对象,在这种情况下,它绑定到其直接右侧的对象)既然
pstring
是一个指针,
const pstring
绑定到指针。
2*3+1
是7。但是如果我做
int I=3+1;
然后
2*I
它给出了8,为什么不应该用它的原始含义替换变量呢?宗教问题警告,但我发现
const char*cstr=0;
可读性好。当我取消引用时,我只在事物的左边放星号。@immibis:如果这与这个问题有什么关系的话?这本书建议在变量名的左边使用它。例如,
int*ptr=0,val=0;
这里ptr是指向int的指针,而val是整数变量。@RobertHarveyI仍然看不出什么你的数学与此有关。
const(char*)
不应该被解释为常量指针而不是指向常量字符的指针吗???@immibis你看不到
(2*3)+1
2*(3+1)
(const char)*
const(char*)之间的类比吗
?哦,好吧。希望其他人会这样做。从您的回答来看:
const char*
被解释为
(const char)*
即指向const char的指针。但是const pstring与
const(char*)相同
即指向常量字符的指针。它们怎么都是指向常量字符的指针@immibis@RobertHarvey它们都是表示事物的令牌序列。在这两种情况下,由令牌序列表示的事物可能会被赋予一个名称,该名称也是令牌。您不能将令牌序列及其子令牌序列拆分为其令牌,然后检查任意一组来确定结果。不管你用什么词,抽象概念是一样的,同样有效。我仍然不明白你的数学与这些有什么关系。难道不应该将
const(char*)
解释为常量指针而不是指向常量的指针吗