无法理解符号:*和**带指针

时间:2015-04-17 07:32:42

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

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

*name

我明白这是一个指针。

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

**name
  

上下文是int **名称,而不是乘法

有人可以帮助我吗?

5 个答案:

答案 0 :(得分:18)

  

注意:如果没有正确的上下文,*name**name的使用是不明确的。它可能是肖像(一)。解除引用运算符(b)乘法运算符

考虑到你正在谈论像

这样的场景
  • char * name;
  • char **name;

在代码中,

  • *name

name是指向char的指针。

  • **name

name是指向char的指针。

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

下方的视觉

enter image description here

如上所述,我们可以说

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

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

答案 1 :(得分:8)

实际上非常简单,请考虑一下:

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!

希望有所帮助!

答案 2 :(得分:5)

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

int var
int *ptr;
int **ptr2;

ptr = &var;
ptr2 = &ptr;

cout << "var : " << var;
cout << "*ptr : " << *ptr;
cout << "**ptr2 : " << **ptr2;

您可以查看here

答案 3 :(得分:0)

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;

答案 4 :(得分:-2)

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