【问题标题】:Pointers c++. Difference between p and p* [closed]指针 c++。 p 和 p* 之间的区别
【发布时间】:2016-05-07 09:53:12
【问题描述】:

当它显示cout << x 时,我不明白它应该打印什么。 还有当它说if ( *x==*y)时,这意味着字母应该相等或位置(位置的好比字母也相等)。

【问题讨论】:

  • 指向char 的指针的输出是特殊的。然后,该指针被视为指向 C 风格以零结尾的字符串中的第一个 char 的指针。但这些都不是学习 C++ 的好例子。
  • @Cheersandhth.-Alf 当然,除了 I/O 之外,这段代码是 C 和 C++ 一样多。我认为老师正试图教他们递归。就递归教学而言,这一点也不差:至少它不会像阶乘那样破坏学生的技术:-)

标签: c++ pointers


【解决方案1】:

当它显示cout << x 时,我不明白它应该打印什么。

由于xchar* 类型,因此在打印时它被视为以null 结尾的C 字符串。如果将指针打印到字符串的中间,则会打印字符串的后缀:

const char *str = "ABCDEFG";
const char *ptr = str + 3;
cout << ptr; // prints DEFG

当它说if ( *x==*y)时,表示字母应该相等或位置

* 在此上下文中的意思是“...指向的值”,即字母应该相等,而不是位置。

【讨论】:

  • 声明char *str = "ABCDEFG";无效。
  • @Cheersandhth.-Alf 啊,当然,这段 C 代码假装它是 C++ :-)
【解决方案2】:

当您说cout &lt;&lt; x 时,它应该打印出整个 char 数组。假设 char *x = "Something" 。如果您输入 cout &lt;&lt; x ,输出将是:Something 。 * 符号是取消引用运算符,它用于取消引用指针(换句话说,获取指针的值)。所以如果你有 char *x = "Something"char *y = "Some other thing" 并且如果你想比较这些 char 数组的第一个字符,你会使用 if(*x == *y) 。所以取消引用一个 char 数组会得到第一个 char。 cout &lt;&lt; *x 输出将是:S.

【讨论】:

  • 谢谢!我明白它是如何工作的!
猜你喜欢
  • 2017-03-28
  • 1970-01-01
  • 2011-03-11
  • 2019-11-27
  • 2017-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多