有没有区别
const char* name = "name";
和
const char *name = "name";
谢谢你。
不。
但是两者之间是有区别的
const char* name = "hello", something = "else";
这不起作用,而
const char *name = "hello", *something = "else";
应该
不,没有区别,两个声明是等价的。
请注意,C 风格倾向于以这种方式声明指针对象:
T *a;
而 C++ 风格倾向于以这种方式声明指针对象:
T* a;
两者都被解析为const char (*name) = "name";
-*
绑定到声明符,而不是类型说明符。
C 和 C++ 中的声明基于表达式的类型,而不是对象。如果你有一个指向某种类型的指针T
,并且你想访问被指向的值,你可以尊重指针:
x = *p;
表达式 的类型*p
是T
,所以指针的声明是
T *p;
在您的情况下,name
指向一个char
以字符串文字开头的值。如果我们想得到字符值'n'
,我们会写类似
const char start = *name; // assigns 'n' to start
因此,表达式 *name
的类型是const char
,所以我们通常编写声明
const char *name;
由于 C 声明语法的工作原理,*
标记周围的空格无关紧要。你可以把它写成
const char *name;
const char* name;
const char * name;
或其他一些组合。我和许多其他人更喜欢第一种形式,因为它准确地反映了声明语法。有些人更喜欢第二种形式,尽管它对语法的看法有点误导,因为它强调name
.
任何声称喜欢第三种形式的人要么是拖钓,要么是疯了。
这主要是一个品味问题。
我个人使用const char* name
是因为我想明确指出类型是指针(a char*
),但很多人认为更正确的是使用const char *name
来表明它*name
是指针(类型char
)