一,内存的偏移量 类型
结构体的内存分布
在32位系统中字节
1. char类型在内存的一个字节
short类型在内存的两个字节
int类型在内存的四个字节
long类型在内存四个字节
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;
}