【问题标题】:What does pointer in struct mean结构中的指针是什么意思
【发布时间】:2015-10-13 07:20:42
【问题描述】:

我已阅读相关问题,但无法理解;当我们有这个是什么意思:

struct address {
# define N (4) 
struct address *nb[N]; } *site;

#define N (4) 放入struct 是什么意思,如果它在struct 之外有什么区别,我不明白struct address *nb[N]; 做了什么。请您清楚完整地解释一下结构中的指针是什么意思?我根本消化不了。

【问题讨论】:

  • 你真的有;吗?
  • 我知道“指针用于存储内存位置的地址”请以非常简单的方式回答这个问题我发现其他问题的一些答案令人困惑。
  • 在使用 C 语言之前,您确实需要了解一些有关 C 的知识。先读一本书或做一些教程。
  • #define 部分可以在结构声明之前的任何位置。不过,您确实需要摆脱;。为什么不只是#define N 4
  • struct address *nb[N]; 是一个struct address 指针数组。

标签: c pointers struct syntax c-preprocessor


【解决方案1】:

在你的代码中,首先改变

 # define N (4); 

 # define N (4)

也就是说,#define 就像一个 textual 替换。因此,经过预处理后,您的代码看起来像

struct address 
{
   struct address *nb[4]; 
} *site;

如果在结构之外有什么区别

没什么,都是一样的。

什么结构地址 *nb[N];会

好吧,它什么,它意味着nbstruct address 的成员,并且是指向struct address 的4 个指针的数组类型.

【讨论】:

    【解决方案2】:

    可以改写为:

    struct address {
        struct address *nb1;
        struct address *nb2;
        struct address *nb3;
        struct address *nb4;
    } *site;
    

    希望这会有所帮助。

    【讨论】:

    • 你是对的,但是数组的整个目的被打败了。只是说。 :-) 我个人认为,我讨厌那些12s 出现在变量名中。
    • @SouravGhosh:我知道,为了简单起见,我只是重写以向 OP 演示。
    • 他在问struct address *nb[N]; 大声哭泣!
    • 不,不一样。您不能使用像数组这样的索引来处理这些单独的变量
    • 我什么时候说是一样的?为了简单起见,我只是试图将变量布置给 OP。
    【解决方案3】:

    我认为发生的事情是编写该代码的人不了解预处理器宏的工作原理。

    您的问题的答案是,在结构内部定义它与在结构外部定义它没有区别,除了在结构外部定义它是更好的编码风格。

    顺便说一句,#define 的每个部分都是不正确或迟钝的。它应该是:

    #define N 4
    

    关于结构中指针的其他问题,nb 元素只是指向同一结构的指针数组。

    目前尚不清楚这将如何有用,因为该结构不包含任何其他元素,这使得它对于像树这样的东西毫无意义。我的猜测是它被用于一些自定义内存管理器。

    【讨论】:

    • 宏常量的定义有所不同。因为您可以将其定义附加到其他宏指令#undef。所以常量的作用域可以通过结构体定义来限制。
    • 到底发生了什么,有区别还是没有?
    • @moshtagh 好吧,那一点是有效的,但前提是结构在结束前有一个对应的#undef N。这又是一种风格。我的论点是,如果您不打算这样做,则不要在块内定义宏(即使没有实际区别)。这样做会使不经意的眼睛误以为该值仅在该范围内有效。
    猜你喜欢
    • 2020-11-28
    • 2011-01-27
    • 2012-11-02
    • 1970-01-01
    • 2011-02-04
    • 2018-04-14
    • 2021-04-21
    • 2011-06-25
    • 2013-03-28
    相关资源
    最近更新 更多