【问题标题】:What is the use of global pointer in a structure in CC语言结构中全局指针有什么用
【发布时间】:2021-07-07 14:22:15
【问题描述】:

我最近开始学习链表,在学习如何编写用于显示链表的代码时,我在结构中遇到了这个所谓的全局指针。所以请你告诉我为什么使用它以及它的作用。

struct Node{
 int data;
 struct Node *next;
 }*first=NULL;
//i am asking about the above pointer *first=NULL

【问题讨论】:

  • 这将取决于上下文。
  • first 不在结构中。它是一个全局指针,可以指向该结构的一个元素。用于指向链表的开头。
  • first 不在结构中。 firststruct Node * 类型的变量,正在初始化为 NULL
  • 代码是结构体struct Node的定义和指向这种结构体first的指针的组合,该结构体被初始化为NULL,意味着它没有指向任何东西。根据名称first,这可能是指向此时为空的链表的第一个元素的指针。 (但没有看到更多代码,这只是一个猜测,目前还不清楚是否有必要将指针作为全局变量,或者是否最好是static。)

标签: c pointers struct linked-list global-variables


【解决方案1】:

像这样的全局指针通常与开发人员只想通过模块的头文件访问的特定资源相关联。例如有效设备或缓冲区位置的系统范围存储。如果此代码片在全局范围内初始化,它开始时没有数据,其他函数可以从中添加或删除数据。其他人可以通过从某个函数(或外部)接收指针 first 并遍历 next 中的指针引用直到 NULL 来查看整个数据列表。

【讨论】:

    【解决方案2】:

    first 不是结构的一部分——它是一个类型为“指向struct Node”的变量。它很可能旨在指向列表的第一个元素。通常你不会让列表的头部成为一个全局变量——你会在main(或任何主驱动程序)中创建它,并将它作为参数传递给操作列表的各种例程:

    struct Node { ... };
    
    int main( void )
    {
      struct Node *first = calloc( 1, sizeof *first );
      ...
      /**
       * The following is a stand-in for however you get the values
       * to add to the list
       */
      int x;
      while( get_next_value( &x ) )
        insert( first, x );
    
      display( first );
      ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 2013-06-27
      • 2011-10-04
      相关资源
      最近更新 更多