【发布时间】:2011-02-18 08:40:19
【问题描述】:
我认为我非常了解引用和指针。以下是我(认为我)知道的:
int i = 5; //i is a primitive type, the value is 5, i do not know the address.
int *ptr; //a pointer to an int. i have no way if knowing the value yet.
ptr = &i; //now i have an address for the value of i (called ptr)
*ptr = 10; //Go to the value in ptr, use it to find a location and store 10 there
请随时评论或更正这些陈述。
现在我正在尝试跳转到指针数组。以下是我不知道的:
char **char_ptrs = new char *[50];
Node **node_ptrs = new Node *[50];
我的理解是我有 2 个指针数组,一组指向字符的指针和一组指向节点的指针。因此,如果我想设置这些值,我会这样做:
char_ptrs[0] = new char[20];
node_ptrs[0] = new Node;
现在我有一个指针,在我的数组的 0 位置,在每个相应的数组中。同样,如果我感到困惑,请随时在此处发表评论。
那么,** 运算符是做什么的?同样,将单个 * 放在实例化旁边做什么 (*[50])? (具体叫什么,实例化?)
【问题讨论】:
-
*ptr = 10 不是“获取存储在 ptr 中的值并将其更改为 10”。它应该是“转到 ptr 中的值,用它来找出另一个位置,并将 10 存储在那里”。这就是取消引用指针的意义。
-
@Uri 很好。编辑和更新。
-
我应该注意到,这本书对于学习 C 中的指针非常有帮助:Richard Reese 的理解和使用 C 指针。我会向任何学习 C 或 C++ 的人推荐这个,因为其中的概念非常宝贵。