如何将值赋给指针?

时间:2018-06-16 13:51:40

标签: c pointers

我正在研究C编程中的数据结构。 我有一个指针问题。 有一个简单的指针变量头初始化。

int* head = NULL;

我不得不在C中研究指针的概念,现在我明白了。 但是,

当我使用该代码时。 我无法理解如何通过值NULL分配* head。 因为据我所知,变量头(不是*头)应首先具有int值。 (这是整数类型的地址)。

但它在该代码中没有任何价值。

所以......我的意见是......

int* head;
head = (some address here);
*head = NULL;

这段代码对我有意义。因为head的值必须是integer类型的地址。

但仍然不知道第一个代码如何工作。

第一个代码:

int* head = NULL;

5 个答案:

答案 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的值,这将导致错误。

指针是地址,您可以声明地址而不指定该地址是否存在任何值。

我认为误导你的是NULLNULL用于指针,而不是用于有效值。

答案 4 :(得分:2)

int* head = NULL;

在这里,您要定义int *类型的变量头。 NULL的分配是自己的,这意味着头部指向位置0。这是指示头部尚未获得有效值的常用方法。

尽管混淆是可以理解的,但使用*head完全是另一回事。