简单结构体

struct student{

  char name[20];   //可以用scanf或者直接赋值

    *如果用char *name  在用scanf时没有内存接收

  long id;

  int age;

  float height;

};

结构体中只能声明变量不能赋初值。

struck student zhangsan;

struck student zhangsan = {"xiaowang",2000002,20,180.5};

结构体的访问用".":xiaowang.name


typedef

typedef  struct student{

  char name[20];   //不能用char *name  在用scanf时没有内存接收

  long id;

  int age;

  float height;

}Student;     // typedef给一个存在的类型取一个别名

Student zhangsan;

Student zhangsan = {"xiaowang",2000002,20,180.5};

如果不加typedef:

struct student{

  char name[20];   //不能用char *name  在用scanf时没有内存接收

  long id;

  int age;

  float height;

}Student;//Student 是一个变量了


结构体指针

Student *s;

如果*name是字符串      s->name = "xiaowang";

如果name[]是数组接收  strcpy(s->name,"xiaowang");

s->age = 23;

Student *s[5]; //每一块都存着结构体的地址

Student xw ={"xiaowang",2345,23,164.3};

s[0] =&xw;  //结构体指针数组里面的每一个都存着地址,如果不给他内存地址,它的值就为空,不可直接赋值。

s[0]->age = 20;


结构体数组

Student array[5] ={};

strcpy(array[0].name,"xiaowang");

array[0].age = 23;


计算结构体内存空间

  如果结构体内部拥有多种数据类型,那么以占据内存字节数最高的类型对齐

typedef struct{

char *name;

int age;

}Person;//16

char * 占据8个字节, int 占据4个字节

所以age变量自动向name对齐。整个占据16个字节

typedef struct{

char name;

int age;

}Person;//

typedef struct{

char name[2];

int age;

}Person;//

typedef struct{

char name[6];

int age;

}Person;//

结构体 + typedef的更多相关文章

  1. 结构体 typedef关键字

    1 结构体 #include <iostream> #include <cstring> using namespace std; void printBook( struct ...

  2. 我学C的那些年[ch02]:宏,结构体,typedef

    c语言的编译过程: 预处理 编译 汇编 链接 而预处理中有三种情况: 文件包含( #include ) 条件编译(#if,#ifndef,#endif) 宏定义( #define ) 宏就是预处理中的 ...

  3. 结构体 typedef struct hash_cell_struct hash_cell_t;

    typedef struct hash_cell_struct hash_cell_t; struct hash_cell_struct{ void* node; /*!< hash chain ...

  4. 结构体typedef struct dtuple_struct dtuple_t;

    /** Structure for an SQL data tuple of fields (logical record) */ struct dtuple_struct { ulint info_ ...

  5. p/invoke碎片,对结构体的处理

    结构体的一些相关知识 可直接转换类类型,比如int类型,在托管代码和非托管代码中占据内存大小 和意义都是一个样的. 结构体封送的关键是:在托管代码和非托管代码中定义的一致性.什么是定义的一致性?包括结 ...

  6. C语言一维数组、二维数组、结构体的初始化

    C语言数组的初始化表示方法 一.C语言一维数组初始化: (1)在定义数组时对数组元素赋以初值.如: static int a[10]={0,1,2,3,4,5,6,7,8,9}; 经过上面的定义和初始 ...

  7. ios开发中的C语言学习—— 结构体简介

    在开发过程中,经常会需要处理一组不同类型的数据,比如学生的个人信息,由姓名.年龄.性别.身高等组成,因为这些数据是由不同数据类型组成的,因此不能用数组表示,对于不同数据类型的一组数据,可以采用结构体来 ...

  8. 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符

    [源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...

  9. Runtime机制之结构体及操作函数

    一.动态语言 Objective-C语言是一门动态语言,它将很多静态语言在编译和链接时期做的事放到了运行时来处理.这种动态语言的优势在于:具有灵活性,比如:消息转发,方法交换等.它有一个运行时系统Ob ...

随机推荐

  1. .net 基础之截取字符串

    在实际开发中有时难免会遇到需要获取某个字符串中的某些字符串,这里我们可以用到字符串截取的办法. 截取字符串的方法很容易(暂不包含中文字符串),只要稍微有点.net基础的人看了都能看懂. /// < ...

  2. Oracle/Mysql/SqlServer函数区别

    mysql日期和时间格式转换 Linux scp 使用详解 Oracle/Mysql/SqlServer函数区别 2011-07-01 12:34:36|  分类: Mysql技术 |  标签:mys ...

  3. Java IO6 :IO总结

    字节流.字符流继承关系 前几篇文章讲解了字节流.字符流的使用,不过Java提供给用户的流类远不止此,限于篇幅原因,没办法一一讲解,而且也没有必要一一讲解,就像我在写博客的时候多次提到的,有问题的时候学 ...

  4. Mapper映射语句高阶应用——ResultMap

    resultMap 元素是MyBatis 中最重要最强大的元素.它就是让你远离 90%的需要从结果 集中取出数据的 JDBC代码的那个东西, 而且在一些情形下允许你做一些 JDBC 不支持的事 情. ...

  5. 高性能PHP日志插件--Seaslog

    日志系统作为记录系统运行的信息,包括 用户输入,安全日志等,日志系统是不能影响用户的使用. 为什么需要记录日志? 既然日志系统增加了整个系统的开销,为什么我还需要它,这是因为日志能帮我们记录运行的很多 ...

  6. 表单提交---前端页面模拟表单提交(form)

    有些时候我们的前端页面总没有<form></form>表单,但是具体的业务时,我们又必须用表单提交才能达到我们想要的结果,LZ最近做了一些关于导出的一些功能,需要调用浏览器默认 ...

  7. ASPCMS 多条件查询

    1. 表单样例: <form name="topFrm" id="topFrm" action="/search.asp"> & ...

  8. 关于Android Assets读取文件为File对象

    关于Android Assets读取文件为File对象的问题,在Assets里面放置文件,在使用的时候,一般是使用AssetManger对象,open方法获取InputStream 然后进行其他操作. ...

  9. Frogger(最短路)

    Frogger(poj2253) Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31854   Accepted: 1026 ...

  10. KL25用SPI操作nor flash

    KL25的SPI连接一个nor flash.该flash型号为FM25F04,支持SPI的模式0和模式3,要求高位先发送,在上升沿采集数据. 通常,SPI有4种模式,取决于CPOL与CPHA如何配置. ...