C语言-------结构体(1)

发布于:2025-02-15 ⋅ 阅读:(12) ⋅ 点赞:(0)

数据类型
 (1)基本数据类型 
   整型 
   浮点型
   字符型 
 (2)构造类型
   数组
   结构体 
     
结构体:  用来处理,现实生活中,更复杂的数据的描述
         用来 描述复杂数据的 一种用户自定义的数据类型 

一.结构体类型 定义  --- 定义(从无到有) 声明()
struct 结构体名
{
    成员列表
};

(1).struct        表示这是一个结构体类型 
(2).结构体名  标识符 
(3).成员列表  这个结构类型中要描述的具体数据 ,一般都是变量定义的形式 

 struct student
   {
       int sno;
       char name[20];
       int age;
       float score;
  };

(此时表示 定义了一个 学生信息的结构体类型        数据类型 --- 用户自定义)

变量的初始化 和 赋值 
struct student   s = {110,"tom",18,98.5};

struct student s[3]={{110,"tom",12,98.2},{111,"jey",13,97.5},{112,"mik",10,99.5}};

引用结构体数据  一般我们是引用到结构体成员 (引用到这种基本类型)

int main(int argc, const char *argv[])
  {
      struct student s={110,"tom",18,98.5};
      printf("sno=%d\n",s.sno);
      printf("name=%s\n",s.name);
      printf("age=%d\n",s.age);
      printf("score=%.1f\n",s.score);
      return 0;
  }

结构体变量名.结构体成员变量名 
   s.sno
   s.name
   s.age
   s.score  //引用到结构体成员变量 
   
说明:
  1. 同一类型的结构体 变量间可以相互赋值 
  2. 结构体变量赋值,是赋值给结构体成员的 

->  //指向结构体成员运算符

结构体类型的指针->结构体成员变量名

void printStuInfo(struct student *s,int len)
      {
          int i=0;
          printf("No\tName\tAge\tScore\n");
          printf("------|\t------|\t------|\t------\n");
          for(i=0;i<len;++i)
          {
              printf(" %d\t",(s+i)->sno);
              printf("%s\t",(s+i)->name);
              printf("%d\t",(s+i)->age);
              printf("%.2f\n",s[i].score);
          }
      }

考点:
   
 结构体的对齐规则: //内存地址的对齐
1.在32位的平台上,默认都是按4字节对齐的。 
2.对于成员变量,
   各自在自己的自然边界上对齐。
   char  -- 1字节 
   short -- 2字节   
   int   -- 4字节  
3.如果 成员变量中有比4字节大。      
  此时 整个结构体 按照4字节对齐。 //32位的平台 
4.如果 成员变量中没有有比4字节大。  
  此时 整个结构体 按照最大的那个成员对齐。
  
  //32位的平台   
  //如果有超过4字节 ,按照4字节对齐
  //如果没有超过4字节的,则按成员变量中最大对齐 
 ----------------------------------------------
  //64位的平台  ---- 64位平台 整个结构体对齐, 按成员中最大的对齐   

  1.结构体成员的对齐 --- 放在自然边界 (偶数位置)
  2.结构体整体的对齐 --- 以结构体中最大的成员对齐