#include"stdio.h"
#include"malloc.h"
#include<string.h>
#include <stdlib.h>
//int 4字节,char 1个字节
struct node{
int member1;
char member2[10];
int member3[0];//变长数组
};
void main()
{
struct node *xiaobo1;
//printf("%d",sizeof( struct node));
xiaobo1 = malloc(sizeof(struct node)+3*sizeof(int));//变长分配内存
memset(xiaobo1,0,sizeof(*xiaobo1));
(*xiaobo1).member1 = 1;
strcpy((*xiaobo1).member2,"xiaobo1");
(*xiaobo1).member3[0] = 30;
(*xiaobo1).member3[1] = 31;
(*xiaobo1).member3[2] = 32;
printf("xiaobo1的内存大小%ld\n",sizeof(xiaobo1));
printf("member1的地址:%p,值:%d\n",&((*xiaobo1).member1),(*xiaobo1).member1);
printf("member2的地址:%p,值:%s\n",&((*xiaobo1).member2),(*xiaobo1).member2);
printf("member3[0]的地址:%p,值:%d\n",&((*xiaobo1).member3[0]),(*xiaobo1).member3[0]);
printf("member3[1]的地址:%p,值:%d\n",&((*xiaobo1).member3[1]),(*xiaobo1).member3[1]);
printf("member3[2]的地址:%p,值:%d\n",&((*xiaobo1).member3[2]),(*xiaobo1).member3[2]);
free(xiaobo1);
/*
输出结果:
xiaobo1的内存大小8
member1的地址:0x55eb504c7260,值:1
member2的地址:0x55eb504c7264,值:xiaobo1
member3[0]的地址:0x55eb504c7270,值:30
member3[1]的地址:0x55eb504c7274,值:31
member3[2]的地址:0x55eb504c7278,值:32
这里注意一下内存对齐,就可以理解这些地址了。
*/
}
结构体可变数组
最新推荐文章于 2023-08-11 08:38:39 发布