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这个词用法的问题,那就太好了
这意味着此变量不能在此模块外使用 例如。-不能使用从其他文件引用此指针
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不是这个意思。事实上,它是在静态存储中分配的,而不是在堆或堆栈上。后一种情况称为“函数作用域和静态存储持续时间”变量,而不是“全局方法作用域”。