C99_变长结构体实现
/*************************************************************************
> 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.csdn.net/shaohuazuo/article/details/40159531
C99_变长结构体实现的更多相关文章
- 结构体(struct)大小
结构体(struct)大小 本文参考链接:C语言结构体(struct)常见使用方法,链接中的实例代码经实践有几处不准确,本文在引用时已做更改 注意:在结构体定义时不能申请空间(除非是结构体变量),不可 ...
- c 结构体中的变长数组
在Linux系统里,/usr/include/linux/if_pppox.h里面有这样一个结构: struct pppoe_tag { __u16 tag_type; __u16 tag_len; ...
- [问题]C# 结构体对齐:如何将变长byte数组对齐
[StructLayout(LayoutKind.Sequential,Pack=1)] struct Report_Read_Parameter { byte Confirmation; byte ...
- [IDA] 将连续的单个变量值修改为结构体
直接选中最上边的结构体,使用ALT+Q来进行修改.
- GCC 中零长数组与变长数组
前两天看程序,发现在某个函数中有下面这段程序: int n; //define a variable n int array[n]; //define an array with length n 在 ...
- C++内存分配及变长数组的动态分配
//------------------------------------------------------------------------------------------------ 第 ...
- 失落的C语言结构体封装艺术
Eric S. Raymond <esr@thyrsus.com> 目录 1. 谁该阅读这篇文章 2. 我为什么写这篇文章 3.对齐要求 4.填充 5.结构体对齐及填充 6.结构体重排序 ...
- slots - Python的结构体 转
上个月看了篇文章 “SAVING 9 GB OF RAM WITH PYTHON’S __SLOTS__”,原来Python也有类似结构体的东东.拖了一个月才写这篇,是因为太久没看pyth ...
- oracle函数、包、变量的定义和使用、重点”结构体和数组”
函数 实例1:输入雇员的姓名,返回该雇员的年薪 create function fun1(spName varchar2) ,); begin +nvl(comm,) into yearSal fro ...
随机推荐
- kb-07专题线段树-02--单点修改,区间最值
/* 区间单点该值,区间查询最大值: hdu-1754 */ #include<iostream> #include<cstdio> #include<cstring&g ...
- Codeforces 899B Months and Years
题目大意 给定 $n$($1\le n\le 24$)个正整数 $a_1,\dots, a_n$ 判断 $a_1$ 到 $a_n$ 是否可能为连续 $n$ 个月份的天数. 解法 由于 $n\le 24 ...
- Dango notes II: class-based views
A view is a callable which takes a request and returns a response. A view can be function (function- ...
- BZOJ 4816 [Sdoi2017]数字表格 ——莫比乌斯反演
大力反演出奇迹. 然后xjb维护. 毕竟T1 #include <map> #include <ctime> #include <cmath> #include & ...
- 刷题总结——coneology(poj2932 扫描线)
题目: Description A student named Round Square loved to play with cones. He would arrange cones with d ...
- Editplus注册码,汉化官方版本
官方认证Edit+简体中文版 https://www.editplus.com/download.html EditPlus注册码在线生成 http://www.jb51.net/tools/edit ...
- iOS-多线程(3)
多线程之GCD(grand central dispatch)中心调度 为了简化多线程的操作,iOS为我们提供了GCD来实现编程. 使用GCD只要遵守两个步骤即可: 创建对列(串行队列,并行队列) 将 ...
- 喵星球上的点名(bzoj 2754)
Description a180285幸运地被选做了地球到喵星球的留学生.他发现喵星人在上课前的点名现象非常有趣. 假设课堂上有N个喵星人,每个喵星人的名字由姓和名构成.喵星球上的老师会选择M个串 ...
- 2015-2016 ACM-ICPC Northeastern European Regional Contest (NEERC 15)
NEERC 15 题解1 题解2 官方题解
- 一次向linux开源社区提交补丁的经历
背景 在开发过程中,偶然发现了spinand驱动的一个bug,满怀欣喜地往社区提补丁.这是怎么样的一个bug呢? static int spinand_mtd_read(struct mtd_info ...