/*************************************************************************
> File Name: C99_lengthenStruct.c
> Author: zshh0604
> Mail: zshh0604@163.com
> Created Time: 2014年10月16日 星期四 17时19分35秒
************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/***
* C99中变成结构的实现。
*
* 一:变长结构体实现的两个原理。
* 1.结构体的地址空间是连续的。
* 2.数组的地址空间也是连续的。
*
* 二: 变长结构体的表示方法如下。
* 1. typedef struct
* {
* int data1;
* char data2[20];
* int data3[0];
* } data;
* 2.其中data3[0]必须是在结构体的最后的一个元素。
* 三:
* Demo说明如何进行数据存取。
*
*/
/**
* 用来测试变长结构体的数据结构。
*/
typedef struct
{
int data1;
char data2[20];
int data3[0];
}data;
/***
* 测试将结构体存放到可变结构体中
*/
typedef struct
{
int data1;
char data2[30];
char data3[0];
}datas;
/*
*测试将people结构体存放到datas中。
*/
typedef struct
{
int id;
char name[30];
}people;
/***
* 初始可变长结构体。
*/
void init_data(void)
{
data * d = NULL;
int i = 0;
d = malloc(sizeof(data)+sizeof(int)*30);
if(d== NULL)
{
printf("分配地址空间失败\n");
return;
}
d->data1 = 10;
strncpy(d->data2,"hello world",strlen("hello world")+1);
for(i=0;i<30; i++)
{
d->data3[i] = i;
printf("d->data3[%d] = %d\n",i,d->data3[i]);
}
}
void init_datas(void)
{
datas * d = NULL;
people p;
people *p1;
d = malloc(sizeof(datas) + sizeof(people));
p.id = 10;
strncpy(p.name,"gameone",strlen("gameone")+1);
memcpy(d->data3,&p,sizeof(people));
p1 = (people*) d->data3;
printf("p1.id = %d\n", p1->id);
printf("p1.name = %s\n", p1->name);
return;
}
void main(void)
{
init_data();
init_datas();
}
转载请注明出处
http://blog.youkuaiyun.com/shaohuazuo/article/details/40159531
C99_变长结构体实现
最新推荐文章于 2020-04-17 17:24:18 发布