排课系统出现SIZE无法识别

设计排课系统时出现SIZE无法识别的标记 报错了怎么改错呢啊,你

img

使用sizeof前要定义struct student, 你可以看看具体定义的位置

#define SIZE sizeof(struct student)
struct student
{
    int a;
};

struct student *head;

int main()
{
    int test = SIZE;
    return 0;
}


  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/720901
  • 这篇博客也不错, 你可以看下C语言中,对于未知输入数组size的处理,输入数据同时,并扩充数组的size
  • 除此之外, 这篇博客: 一个结构体占用内存大小的问题中的 sizeo(结构体)的大小问题 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 先来看下面的示例代码:

    struct Demo
    {
        int a;
        int b;
    };
    
    int main()
    {
        cout<<"Demo size = " << sizeof(Demo)<<endl;
    
        return 0;
    }

    毫无疑问,都会说,结果为 8
    这时我提出一个问题?请问在32位和64位PC机上分别是多少,或许有些人就有些迷茫了。
    实际上都等于 8,这时候可能有些人更加疑惑了
    这里写图片描述

    实际上 int 型数据在32位/64位都只占用4字节

    下面我们再看一个例子:

    struct Demo
    {
        int* a;
    };
    
    int main()
    {
        cout<<"Demo size = " << sizeof(Demo)<<endl;
    
        return 0;
    }

    直接上结果:
    这里写图片描述
    我们会惊奇的发现 对于int型指针,32位占4字节,64位占8字节,希望大家可以谨记这一点。

    那么试问,如果将结构体里的 int* a 改为 char* a,那么结果优势如何?
    哈!结果居然运行一样

    struct Demo
    {
        char* a;
    };
    
    int main()
    {
        cout<<"Demo size = " << sizeof(Demo)<<endl;
    
        return 0;
    }

    这里写图片描述
    是不是和大家想的不太一样呢?
    其实指针默认情况下是int型指针

    接下来可能就是面实中经常遇到了问题,给你一个结构体,那你计算出他占用的内存。(以下都是在32位机上所占用内存)

    struct Demo
    {
        char a;
        int b;
    };

    初学编程的人会说等于5,1+4 = 5 那么我们看看运行结果
    这里写图片描述
    很多人会表示惊讶,为什么是8呢?
    实际上这里存在一个内存对齐的原因。

    • 首先 char 是 1 字节 int 是 4 字节,但是对于32位机,如果char 后面接着放 int 型的数据话,会有一个字节的数据会令其一行存放,这样会造成 int 型数据需要读取俩次才能被读取,所以采用内存对齐原则,另起一行存放 int 型数据。
      这里写图片描述

    具体关于内存对齐原则,会在接下来的博客中提到。

    这里给出一些规则总结,希望对大家有帮助:

    • char 1字节 int 4字节 double 8字节 int* 4字节
    • 首先看一个结构体中最大占用数据类型是几个字节,
    • 那么就是以这个字节数位对齐字节数,将结构体中各个数据依次排放,当放不下(出现一个数据需要放两行)的情况就令其一行放
    • 最终的占用内存一定是最大数据占用字节的整数倍