Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 静态结构和正常结构有什么区别?_C++_C_Static_Structure - Fatal编程技术网

C++ 静态结构和正常结构有什么区别?

C++ 静态结构和正常结构有什么区别?,c++,c,static,structure,C++,C,Static,Structure,我这里有一个代码示例 struct node { int data; struct node *link; }; static struct node *first = NULL; 如果有人能帮我解答下面关于static这个词用法的问题,那就太好了 在上面的代码中,关键字static做了什么 正常结构和静态结构的区别是什么 这意味着此变量不能在此模块外使用 例如。-不能使用从其他文件引用此指针 extern struct node *first

我这里有一个代码示例

struct node { 
        int data;
        struct node *link;
    };
    static struct node *first = NULL;
如果有人能帮我解答下面关于static这个词用法的问题,那就太好了

  • 在上面的代码中,关键字static做了什么

  • 正常结构和静态结构的区别是什么


  • 这意味着此变量不能在此模块外使用

    例如。-不能使用从其他文件引用此指针

    extern struct node *first;
    

    一个重要的注意事项是结构不是静态的,只有
    first
    是指向此类结构的指针是静态的。

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

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

    static struct node *first = NULL;
    
    如果在方法外部定义,则首先给出
    内部链接
    。它只能在定义模块内部使用

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

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

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

    它不会影响结构本身的定义。这只是意味着结构的特定实例(此处名为
    first
    )具有内部链接。

    全局变量的static关键字使该变量位于定义它的模块的局部。也就是说,您无法从其他模块访问它


    如果在函数中定义了静态变量,则该变量将保持活动状态,并在调用此函数之间更新。

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

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

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

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

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

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


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

    代码中没有
    静态结构。它只是
    struct node
    static
    实例@iammilind:甚至不是这样,它是
    struct node*
    的实例。你不是说内部链接吗?它也可以是方法内部的静态变量。@LuchianGrigore-true,没有考虑到这一点。static不是这个意思。事实上,它是在静态存储中分配的,而不是在堆或堆栈上。后一种情况称为“函数作用域和静态存储持续时间”变量,而不是“全局方法作用域”。