我有一个指针问题。我知道这个是什么意思:
*name
我理解这是一个指针。
我一直在搜索,但我既不了解它的功能,也没有找到有用的信息。
**name
这里的“**”指的是int类型的指针name,而不是乘法运算符
有人能帮我吗?
我有一个指针问题。我知道这个是什么意思:
*name
我理解这是一个指针。
我一直在搜索,但我既不了解它的功能,也没有找到有用的信息。
**name
这里的“**”指的是int类型的指针name,而不是乘法运算符
有人能帮我吗?
注意:如果没有适当的上下文,使用
*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
在这里是一个指向指针的指针。希望现在可以更清楚了。
实际上很简单,考虑以下情况:
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!
int var
int *ptr;
int **ptr2;
ptr = &var;
ptr2 = &ptr;
cout << "var : " << var;
cout << "*ptr : " << *ptr;
cout << "**ptr2 : " << **ptr2;
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;
在这种情况下,name将是指向指针的指针。
*name
和**name
的上下文。 - juanchopanza5 * name
中它是乘法。但那是一个二元(2参数)operator *
,而不是一元(1参数)operator*
。 - MSaltersint **name
还是std::cout << **name
都没有关系。 - MSalters