我正在研究C编程中的数据结构。 我有一个指针问题。 有一个简单的指针变量头初始化。
int* head = NULL;
我不得不在C中研究指针的概念,现在我明白了。 但是,
当我使用该代码时。 我无法理解如何通过值NULL分配* head。 因为据我所知,变量头(不是*头)应首先具有int值。 (这是整数类型的地址)。
但它在该代码中没有任何价值。
所以......我的意见是......
int* head;
head = (some address here);
*head = NULL;
这段代码对我有意义。因为head的值必须是integer类型的地址。
但仍然不知道第一个代码如何工作。
第一个代码:
int* head = NULL;
答案 0 :(得分:5)
int* head = NULL;
函数中的相当于:
int* head;
head = NULL; // Assign pointer value, *not* dereference
不等同于此(显然会出现问题,因为head
会指向什么?)
int* head;
*head = NULL; // Dereference
答案 1 :(得分:4)
当你说
时int *head;
您定义的变量的名称为head
,其类型为"指向int
"或int *
的指针。
当你说
时int *head = NULL;
您正在声明相同的变量head
,并且您还要为其初始值NULL
。
但是由于变量的名称是head
,如果你想在一行上定义它然后在第二行给它一个值,那就这样做:
int *head;
head = NULL;
但是,这是真的,一开始可能会令人困惑。
对于普通变量,您可以轻松地想象
int i = 5;
但稍后将其更改为
int i;
i = 5;
所以,如果你说
int *head = NULL;
很自然地希望将其改为
int *head;
*head = NULL;
但这是错误的。
混淆的一大部分是*
字符最终结束
做两件事。
当你说
时int *head;
*
正在做的是说你正在宣布一个指针。
你在说,"我宣布一个名为head
的变量,它是一个
指针及其指向的是int
。"
但是当你说
时*head = NULL;
*
正在做的是说"拿指针head
,然后弄明白
它指向的是什么,并将指向的位置设置为NULL
。"
因此,当您说*head = NULL
时,您不将head
设置为
NULL
;您将指向的位置设置为NULL。和
这是一个非常不同的事情。
底线:你想要的是
head = NULL;
答案 2 :(得分:2)
int* head = NULL;
只是意味着head是一个空指针。 NULL只是一个0的宏,我们已经确定一个值为0的指针指向什么。
答案 3 :(得分:2)
int* header = NULL;
正常工作,直到您尝试访问存储在地址NULL
的值,这将导致错误。
指针是地址,您可以声明地址而不指定该地址是否存在任何值。
我认为误导你的是NULL
。
NULL
用于指针,而不是用于有效值。
答案 4 :(得分:2)
int* head = NULL;
在这里,您要定义int *
类型的变量头。 NULL
的分配是自己的,这意味着头部指向位置0
。这是指示头部尚未获得有效值的常用方法。
尽管混淆是可以理解的,但使用*head
完全是另一回事。