C语言零碎知识点总结(结构体)

关于变量的含义:变量可以看成一段人文化的内存空间,a = 10是将10赋值给了a所代表的内存空间。

sizeof()是一个关键字,计算一个变量或类型所占的内存空间,计算栈上的内存空间

struct Node{

};

int a = sizeof(struct Node);

上述a的值是0,因为它不包含任何类型。

在结构体里面不能对数据进行初始化,例如

struct Node{
    int a = 10;
};

结构体在没有实例化的时候只是一个概念,相当于一个类型(int 等),在内存中不占有空间,所以不能进行赋值操作。

在结构体中不能使用static关键字定义变量,但是可以使用const

struct Node{
    const int d;//正确
   static int d;//错误
}Node;
关键字解释:

     const修饰一个变量,表示该变量只具有可读属性,不可写。

static的解释:

static修饰全局变量:

一个进程中的内存分配示意图:


其中.txt存放要执行的二进制文件,.data存放已经初始化的全局变量,.bss存放没有初始化的全局变量。这两个地方存放的数据是和进程同生命周期的,在全局变量前加上关键字static修饰,称为静态全局变量,也是存放在上述两个内存段中,只是它具有局域的特性,只在定义他的源文件中有效,其他源文件无法访问它,只有在定义它的源文件中的变量或者函数使用

static修饰局部变量:

放的地址:静态存储区中的.data段中,在定义的同时自动初始化为0

访问权限:静态局部变量的作用域是局部变量的作用域

int main()
{
   int a = 7;
   {
         static int a = 10;
        a++;
   }
   printf("%d", a);
   return 0;
}
这个函数输出结果显而易见是7.。

所以在结构体中不能定义static关键字的变量,因为static初始化时会被自动赋值为0,有一点类似于全局变量。



你可能感兴趣的:(C语言零碎知识点总结(结构体))