【问题标题】:Do declaring a pointer in C also declare a variable with the same name在 C 中声明一个指针也声明一个同名的变量
【发布时间】:2017-05-10 13:51:43
【问题描述】:

如果我创建一个像这样的指针:

 int *pointer;

也是用C语言创建的变量(称为指针)?为什么/为什么不?

【问题讨论】:

  • 你能解释一下你认为变量是什么吗?它是一个可以以某种方式使用的名称吗?它是存储价值的地方吗?什么样的价值?如所问,您的问题可能无法让您满意。
  • 是时候阅读基础知识了......

标签: c pointers syntax


【解决方案1】:

让我们把术语弄清楚:

  • int *pointer 声明一个变量
  • 变量有名称和类型
  • 变量的名字是pointer
  • 变量的类型是“指向int的指针”

【讨论】:

  • 谢谢,相当复习:)
【解决方案2】:

不,指针就像一个 int:一个数字。它恰好是一个标识内存位置的数字,如果在该内存位置存储了某些内容,则可以将其称为地址。与 int 一样,指针可以存储在变量中。存储指针的变量可以称为指针变量。

【讨论】:

  • 相反,地址是一个数字,指针是用于存储地址的 C 变量类型的组名。术语指针在 C(和 C++)之外不存在。
  • 指针可能是也可能不是整数。在特定实现中,它是整数。 C 标准没有施加任何此类限制。
【解决方案3】:

问题:代码可以有同名的变量和指针吗?

答案是否定的,因为这些名字都在同一个“范围内”;

如果它们各自位于不同函数(或不同文件)的本地,那么它们位于不同的“作用域”中,那么可以使用相同的名称。

【讨论】:

    【解决方案4】:

    你有一个变量名pointer,它的类型是int *,即一个指向int的指针。这给你空间来存储int

    例如,如果您这样做:

    int *pointer;
    *pointer = 1;
    

    您将调用undefined behavior,因为您将尝试取消引用未初始化的指针。

    但这是有效的。

    int value;
    int *pointer;
    pointer = &value;
    *pointer = 1;
    

    在本例中,我们将pointer 设置为int 类型变量的地址。然后我们可以取消引用该变量以读取/写入它指向的位置。

    总而言之,声明指向类型的指针不会自动为类型本身提供空间。

    【讨论】:

    • 尽管事实如此,但这如何回答问题?
    • @dbush,我认为提出的问题要简单得多。 pointer 是否为变量。
    • 这确实不能回答问题。但我认为很好地提到了未定义的行为。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多