【问题标题】:How can I assign the value to pointer?如何将值分配给指针?
【发布时间】:2018-11-26 01:30:04
【问题描述】:

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

int* head = NULL;

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

当我使用该代码时。 我不明白 *head 是如何由值 NULL 分配的。 因为据我所知,变量 head(not *head) 首先应该有一个 int 值。 (这是整数类型的地址)。

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

所以……我的看法是……

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

这段代码对我来说确实有意义。因为 head 的值必须是整数类型的地址。

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

第一个代码:

int* head = NULL;

【问题讨论】:

  • NULL 也可以是指向整数的指针。 0 作为整数可以分配给指针。按照惯例,它是一个不指向任何地方的地址。
  • @AjayBrahmakshatriya 我不知道这件事。真的很新。谢谢。
  • @alk 这个问题对理解很有帮助 * :) 谢谢。

标签: c pointers


【解决方案1】:

当你说

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】:
    int* head = NULL;
    

    在函数中等价于:

    int* head;
    head = NULL;    // Assign pointer value, *not* dereference
    

    等同于这个(这显然是有问题的,因为head 会指向什么?)

    int* head;
    *head = NULL;  // Dereference
    

    【讨论】:

    • "... 不等同于 this",因为在后一种情况下,* 充当“去引用”操作符。这使得*head 评估为intint 其中head 指向,它不是因为它指向NULL,这不是一个有效的内存。
    • 在函数上下文中,这是未定义的行为,因为 head 从未被初始化。
    【解决方案3】:

    int* head = NULL; 只是表示 head 是一个空指针。 NULL 只是 0 的宏,我们已经确定值为 0 的指针不指向任何内容。

    【讨论】:

      【解决方案4】:
      int* head = NULL;
      

      在这里,您定义了一个 int * 类型的变量头。 NULL的赋值是指向自己的head,也就是说head指向的是0的位置。这是表示 head 尚未获得有效值的常用方法。

      使用*head 是完全不同的事情,尽管混淆是可以理解的。

      【讨论】:

      • "... head 还没有得到有效值。" 好吧,NULL 指针的有效值。它仍然没有解决有效的内存。
      • 还有NULL不一定需要参考物理地址0。尽管在许多系统上确实如此。不过,如果转换为int,它总是 评估为0
      【解决方案5】:

      int* header = NULL; 工作正常,直到您尝试访问存储在地址 NULL 的值,这将引发错误。

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

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

      【讨论】:

      • 或地址”哪些地址?
      • "用于指针 [...],而不是用于有效值。" 指针是一个变量,就像 C 中的任何其他变量一样。所以指针也有一个“值”,就像任何其他变量一样。
      • 好吧,也许我的解释有点混乱。指针用于存储值,就像任何其他变量一样,但这些值是内存中的地址。
      • 嗯,好吧,仍然挑剔:指针不是地址,指针是一个保存地址值的变量。我认为“地址”本身就在“硬件”中。
      • "也许是我的解释" 那为什么不调整呢? ;-)
      猜你喜欢
      • 2013-12-10
      • 1970-01-01
      • 2023-03-26
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      相关资源
      最近更新 更多