【问题标题】:what is the difference between static structure and normal structure?静态结构和普通结构有什么区别?
【发布时间】:2012-03-06 09:47:12
【问题描述】:

我这里有一个代码示例。

struct node { 
        int data;
        struct node *link;
    };
    static struct node *first = NULL;

如果有人能对我下面关于静态这个词的用法提出一些问题,那就太好了。

  1. 上面代码中关键字static的作用是什么?

  2. 普通结构和静态结构有什么区别?

【问题讨论】:

  • 您的代码中没有static struct。这只是staticstruct node 实例。
  • @iammilind:甚至不是,它是struct node*的一个实例。

标签: c++ c static structure


【解决方案1】:

它创建一个指向node 的静态指针并将其初始化为NULL

变量定义可以有多种含义:

static struct node *first = NULL;

如果在方法之外定义,它会给出first 内部链接。只能在定义模块内部使用。

但您也可以在方法中找到该行:

void foo()
{ 
    static struct node *first = NULL;
}

该变量是驻留在静态存储中的方法范围变量。它被初始化为NULL 一次,并且所有后续更改在函数调用之间保持不变。

【讨论】:

  • 后一种情况称为具有“函数作用域和静态存储持续时间”的变量,而不是“全局方法作用域”。
【解决方案2】:

表示这个变量不能在这个模块之外使用。

例如- 您不能使用

从另一个文件中引用此指针
extern struct node *first;

一个重要的注意是结构不是静态的,只有first是指向这种结构的指针是静态的。

【讨论】:

  • 也可以是方法内的静态变量。
  • @LuchianGrigore - 是的,没有考虑到这一点。
【解决方案3】:

它不影响结构本身的定义。这只是意味着结构的特定instance,这里命名为first,具有内部链接。

【讨论】:

  • 你不是说内部链接吗?
【解决方案4】:

全局变量的 static 关键字使变量在定义它的模块中成为局部变量。 IE。你不能从另一个模块访问它。

如果静态变量是在函数中定义的,它会使变量保持活动状态并在调用此函数之间更新。

【讨论】:

    【解决方案5】:

    在修改变量时,static关键字指定该变量具有静态持续时间(程序开始时分配,程序结束时解除分配)并将其初始化为0,除非指定另一个值。在文件范围内修改变量或函数时,static 关键字指定变量或函数具有内部链接(其名称在声明它的文件之外不可见)。

    在函数中声明为静态的变量在调用该函数之间保持其状态。

    在类声明中修改数据成员时,static 关键字指定该成员的一份副本由该类的所有实例共享。在类声明中修改成员函数时,static关键字指定该函数只访问静态成员。

    类的静态数据成员必须在文件范围内初始化。

    在递归代码中,静态对象或变量保证在代码块的不同实例中具有相同的状态。

    联合的成员不能声明为静态的。全局声明的匿名联合必须显式声明为静态。

    在所有块之外定义的对象和变量默认具有静态生命周期和外部链接。显式声明为静态的全局对象或变量具有内部链接。

    【讨论】:

    • 静态不是这个意思。事实上,它是分配在静态存储中,而不是在堆或堆栈上。
    猜你喜欢
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2020-11-16
    相关资源
    最近更新 更多