结构体的学习

结构体的学习

一、结构体。

1)定义结构体和变量:struct student{

                      int num;

                  char name[20];

                  float score[3];

              }stu1;

              struct stu2,stu3[2] = {1000,”zhangsan”,70,80,90,1001,”lisi”,57,58,59};

2)给结构体中字符数组赋值:strcpy(stu1.name,”zhangsan”);

3)结构体成员的三种表示方法:struct student stu1, * ptr;

                      stu1.num = 1001;

                      ptr->num = 1002;

                      (* ptr).num = 1003;

4)内存的计算:(结构体内存以四个字节对齐)

    例一:(1)中的结构体所占空间36个字节。

例二:#include <stdio.h>
typedef struct
{
  int    aa1;      //4
个字节对齐 1111
  char bb1   ;   //1
个字节对齐 1
  short cc1;      //2
个字节对齐 011
  char dd1;      //1
个字节对齐 1
  } testlength1;
int length1 = sizeof(testlength1); //4
个字节对齐,占用字节11111011 1000,length = 12

例三:#include <stdio.h>
typedef struct
{
  int    aa1;      //4
个字节对齐 1111
  char bb1   ;   //1
个字节对齐 1
  short cc1;      //2
个字节对齐 011
  char dd1;      //1
个字节对齐 1
  } testlength1;
int length1 = sizeof(testlength1); //4
个字节对齐,占用字节11111011 1000,length = 12

    

二、联合的使用:(共用同一内存,所占内存以最大字节算)

union data{

    intdata;

    char c;

    double f;

}

union data s1;

len = sizeof(s1);---------len = 8;从第一个地址开始,以最大字节为算。

#pragma pack(n)-----n字节对齐

三、typedef的用法:typedef  原有类型名  新类型名

   (1)  typedef  int NUM[100];(二维数组同理)

      NUM  a---------int a[100]

(2)  typedef  char* STRING;

STRING  str------char* str

(3) typedef  int  (* POINT) (int);

      POINT f---------int  (* f) (int)

(4) typedef  unsigned  char uchar;

      uchar a---------unsigned char a

(5) typedef  int*  NUM[3];

      NUM a---------int*  a[3]

(6) tyrpdef  struct  Node{

        int data;

        struct Node*  ptr;

    }PNode;

 

    PNode  N1;

----struct  Node {

            int data;

            PNode*  ptr;

        };

四、volatile:它所修饰的变量会改变,提醒编译器每次都到内存中取值。

五、大端模式和小端模式

大端模式:高位数据放在低地址;低位数据放在高地址。

小端模式:低位数据放在低地址;高位数据放在高地址。

例题:

#include <stdio.h>

union data{

   char a[4];

    inti;

};

int main()

{

   union data s1;

   s1.a[0] = 0x78;

   s1.a[1] = 0x56;

   s1.a[2] = 0x34;

   s1.a[3] = 0x12;

   printf("s1 = %x\n", s1.i);

   return 0;

}

结果:s1 = 12345678

高地址-------------低地址。

s1.a[0]是低地址,输出结果78也放在低地址位置,所以为小端模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值