【问题标题】:Not able to understand the notations : * and ** with pointers无法理解符号:* 和 ** 带指针
【发布时间】:2015-06-23 22:30:36
【问题描述】:

我的指针有问题。我知道这是做什么的:

*name

我知道这是一个指针。

我一直在搜索,但我不明白这个是做什么的,也没有找到有用的信息

**name

上下文是int **name,而不是乘法

有人可以帮我吗?

【问题讨论】:

  • 哇,真快!谢谢大家:)
  • 这完全取决于*name**name所在的上下文。
  • 嗯,显然在5 * name 中是乘法。但那是 binary (2 arg) operator *,而不是 unary (1 arg) operator*
  • @MSalters 你在思考运营商,但回答者都是思考型。所以,上下文很重要。

标签: c++ pointers dereference pointer-to-pointer


【解决方案1】:

注意:如果没有正确的上下文,*name**name 的用法会模棱两可。它可能是肖像(a)。解引用运算符 (b) 乘法运算符

考虑到你说的是这样的场景

  • char * name;
  • char **name;

在代码中,

  • *name

name 是指向char 的指针。

  • **name

name是一个指针,指向一个char的指针。

请不要与“双指针”混淆,它有时用于表示指向指针的指针,但实际上应该表示指向双数据类型变量的指针。

下面的视觉效果

如上所述,我们可以说

char value = `c`;
char *p2 = &value;   // &value is 8000, so p2 == 8000, &p2 == 5000
char **p1 = &p2;     // &p2 == 5000, p1 == 5000

所以,这里的p1 是一个指向指针的指针。希望这能让事情变得清晰。

【讨论】:

  • @juanchopanza 感谢先生的建议。相应更新。
  • “指向类型的指针”是什么意思?您不能指向 C++ 中的类型。
  • @Adam 我尝试泛化。 ,数据和功能相结合。有更好的词建议吗?
  • 在第一种情况下,我会说“名称是指向 char 的指针”,在第二种情况下,“名称是指向 char 的指针的指针”。
【解决方案2】:

其实很简单,考虑一下:

int a; // a is an int
int* b; // b is a pointer to an int
int** c; // c is a pointer to a pointer to an int

如果您将每个级别都视为另一种变量类型(因此,将 *int 视为一种类型),则更容易理解。 另一个例子:

typedef int* IntPointer;
IntPointer a; // a is an IntPointer
IntPointer* b; // b is a pointer to an IntPointer!

希望有帮助!

【讨论】:

    【解决方案3】:

    指针存储变量的地址,指针指针存储另一个指针的地址。

    int var
    int *ptr;
    int **ptr2;
    
    ptr = &var;
    ptr2 = &ptr;
    
    cout << "var : " << var;
    cout << "*ptr : " << *ptr;
    cout << "**ptr2 : " << **ptr2;
    

    你可以看here

    【讨论】:

      【解决方案4】:
      int a = 5;// a is int, a = 5.
      int *p1 = &a; // p1 is pointer, p1 point to physical address of a;
      int **p2 = &p1; // p2 is pointer of pointer, p2 point to physical adress of p1;
      
      cout<< "a = "<<a << " *p1 = "<<*p1<<" *(*p2) = " << *(*p2)<<endl;
      

      【讨论】:

        【解决方案5】:

        **在这种情况下是名称。将是一个指向指针的指针。

        【讨论】:

          猜你喜欢
          • 2017-11-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-29
          • 2019-10-02
          相关资源
          最近更新 更多