【问题标题】:Where to write the * in declaration? [duplicate]声明中的 * 在哪里写? [复制]
【发布时间】:2020-12-16 05:55:59
【问题描述】:

Mahlzeit 社区,

我有一个新问题:D

当我想声明一个指针时,我在哪里写* 有什么不同吗?

例如

void loopsWithCStringsV2()
{
    const char*  str1 = "i love learning";
    const char * str2 = "i love learning";
    const char  *str3 = "i love learning";
    
    std::cout << "str1: " << str1 << std::endl;
    std::cout << "str2: " << str2 << std::endl;
    std::cout << "str3: " << str3 << std::endl;

    std::cout << "&str1: " << &str1 << std::endl;
    std::cout << "&str2: " << &str2 << std::endl;
    std::cout << "&str3: " << &str3 << std::endl;

    std::cout << "*str1: " << *str1 << std::endl;
    std::cout << "*str2: " << *str2 << std::endl;
    std::cout << "*str3: " << *str3 << std::endl;
}

将导致:

str1: i love learning
str2: i love learning
str3: i love learning
&str1: 006FFAA8
&str2: 006FFA9C
&str3: 006FFA90
*str1: i
*str2: i
*str3: i

享受你的一天:)

【问题讨论】:

  • 没有。空格大多被忽略
  • 不,它没有。正式名称为const char *str1;,尽管多年来一直将其视为const char* str1
  • * 是一个不需要空格的标记,所以没关系。你甚至可以像const char*str4那样做可憎的事。
  • @Yksisarvinen:我有一位量化分析师坚持这样做。现在适用于模型验证。
  • 两者都有好处:* 是类型的一部分,而不是名称的一部分,因此int* x; 另一方面,实际上语法规则说* 属于@ 987654331@ 不是int,如果你有多个一行,这很重要,因此int *x,*y;。我确定有重复...

标签: c++


【解决方案1】:

当我想声明一个指针时,我在哪里写 * 有什么不同吗?

是的,* 的位置很重要。例如,这些是错误的:

*const char  str1 = "i love learning";
const* char  str1 = "i love learning";
const char  str1 = "i love learning";*

const char*  str1 = "i love learning";
const char * str2 = "i love learning";
const char  *str3 = "i love learning";

* 周围的空格无效。在大多数情况下,空格在 C++ 中几乎没有意义,除了将诸如关键字之类的标记与其他文本分开。以上都是一样的。

【讨论】:

  • 你的意思是“不”对吧?
  • @Bathsheba No. 放置 * 很重要。空格没有。
  • ...但是 OP 只考虑 const char* str1 vs const char *str 如果你提到 const char* str vs const * char str 你应该提到它,目前还不太清楚
  • @idclev463035818 添加了说明。
  • 知道了。不错的答案。投赞成票。
【解决方案2】:

简短的回答是不。
在您的示例中,它没有任何区别。
此外,你可以写这样的东西,它的行为方式也是一样的:

const char*str1 = "i love learning";

但是实际上还有另一种情况,“*”的位置会产生巨大的差异。
当您在字符之前和字符之后写入指针 * 时。
例如const * char str1const char * str1
在一种情况下,您会得到一个指向 char 的常量指针,而在另一种情况下,您会得到一个指向常量 char 的指针。
更多详情请查看:
What is the difference between const int*, const int * const, and int const *?

【讨论】: