差价黑白 **PTR 和 *PTR

difference b/w **ptr and *ptr

本文关键字:PTR 黑白      更新时间:2023-10-16

我对指针的基本知识是它们指向一个内存位置,并且它们可用于更改和提取存储在该地址的值。例如。

int a=5;
int *b;
b=&a;

现在这里 b 指向 a 的内存位置。

cout<<*b; //gives the output 5
cout<<b;  //outputs the address of a.

基本上是为了目的,并在函数和数据结构(如链表和树)中通过引用传递值。

main()
{
  node *head=NULL;// A pointer head of type node structure
  add(&head,2); //adds the value to linked list
}
void add(node**head,int data)
{
  //adds value into node
}

任何人都可以告诉我为什么 &head 在 add() 函数中被接收为 **head。
另外,如果它被接收为*头,会有什么不同?

当我打印**head的值时,它给了我一个编译器错误。

头的类型是node*,当你得到node*(&head)的地址时,它的类型是node**。

节点

**和节点*之间的区别与int*和int相同。其中一个定义指向其他类型的指针。

add 方法获取指针,因为它可能会更改 head 的值。 如果 *head 为 NULL,它应该创建一个新节点并将 head 分配给这个新节点的地址。 如果它只输入节点头,分配头 = malloc(...) 将不起作用,因为 C 是按值传递的,它只是分配函数中定义的"头", 主要不是头。但是如果 main 中获取了 head 的地址,它可以通过访问它来自由更改它,例如 *head = malloc(...)

head 是一个指针,所以你不能真正打印它的值(好吧,如果你投射它可以,但它不会有任何意义)。你可能需要投射它

int *p; // p -> is a pointer to an int, *p -> integer contained in address pointed by p.

同样地

int **p2; // p2 -> a pointer to a pointer to an it, *p2 -> pointer to a int, **p2 int.

如果你感到困惑,你可以把它作为一个覆盖规则记住。如果你想知道 *p 是什么,只需覆盖 *p(我们有 int,所以它是一个 int),如果你想知道 *p2 是什么,只需覆盖它(我们有 int * 意味着它是指向 int 的指针)。

这是我

对另一个问题的回答:https://stackoverflow.com/a/20818342/2805305

问题是关于操作得到的错误,但在我的回答中,我准确地解释了你需要知道的内容。