结构体

一,内存的偏移量 类型

结构体的内存分布
在32位系统中字节
1. char类型在内存的一个字节

  1. short类型在内存的两个字节

  2. int类型在内存的四个字节

  3. long类型在内存四个字节

  4. long long 类型在内存中八个字节

    这里写图片描述


/*************************************************************************
     结构体的的内存分析 

    > File Name:
    > Author: songli
    > QQ:2734030745
    > Mail: 15850774503@163.com
    > Created Time:
 ************************************************************************/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct stu
{
    char name[21]; //21-> 24
    int age;   //4-> 4
    char sex; //1->4
    int score[3]; //12->12

};

struct stu2
{
    char name[21]; //21-> 22byte
    char sex; //1->2byte
    int age;   //4-> 4byte
    int score[3]; //12->12byte

};

int main(int argc, char *argv[])
{
    struct stu str;
    struct stu2 str2;

    printf("sizeof(str) = %d\n", sizeof(str));

    printf("sizeof(str2) = %d\n", sizeof(str2));


    printf("\n");
    system("pause");
    return EXIT_SUCCESS;
}

在结构体中偏移量的计算
下面的44个字节

struct stu
{
    char name[21]; //21-> 24
    int age;   //4-> 4
    char sex; //1->4
    int score[3]; //12->12

};

分析图

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

注意类型的都是字节的倍数这点重要

2,union的使用

union是使用一块内存的
不可以同时使用


/*************************************************************************
     共同体的的内存分析 
    > File Name:
    > Author: songli
    > QQ:2734030745
    > Mail: 15850774503@163.com
    > Created Time:
 ************************************************************************/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

union Action
{
    int i;
    double d;
    char a;
    short s;
};

int main(int argc, char *argv[])
{
    union Action ac;
    printf("sizeof = %d\n", sizeof(ac));

    ac.i = 45;
    ac.d = 45.34;
    ac.a = 'c';
    ac.s = "好";

    printf("%p\n", ac.i);
    printf("%p\n", &ac.d);
    printf("%p\n", &ac.a);
    printf("%p\n", &ac.s);


    printf("%d\n", ac.i);
    //printf("%c\n", ac.a);
    printf("%s\n", ac.s);









    //int i = 4;
    //int i1 = 3;
    //int i2 = 4;
    //int i3 = 4;
    //int i4 = 4;

    //printf("int i %p\n", &i);
    //printf("int i1 %p\n", &i1);
    //printf("int i2 %p\n", &i2);
    //printf("int i3 %p\n", &i3);
    //printf("int i4 %p\n", &i4);
    printf("\n");
    system("pause");
    return EXIT_SUCCESS;
}

这里写图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值