之间有区别吗?
const char* name = "name";
和
const char *name = "name";
谢谢。
答案 0 :(得分:7)
没有
但
之间存在差异const char* name = "hello", something = "else";
这不起作用,而
const char *name = "hello", *something = "else";
应
答案 1 :(得分:2)
不,没有区别,两个声明都是等价的。
请注意,C样式倾向于以这种方式声明指针对象:
T *a;
而C ++风格倾向于以这种方式声明指针对象:
T* a;
答案 2 :(得分:2)
两者都被解析为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
的类型。
任何声称喜欢第三种形式的人都是拖钓或疯狂。
答案 3 :(得分:0)
这主要是品味问题。
我个人使用const char* name
,因为我想明确表示该类型是一个指针(char*
),但很多人认为使用const char *name
表示更正确*name
是一个指针(类型char
)