一、结构体的介绍

/*
语法:
struct 结构体名{
成员列表;
};
切记切记有分号! 说明:成员列表就是指你要保存哪些类型的数据。 注意:上面的语法只是定义一个新的类型,而这个类型叫做结构体类型。 因为类型不能保存数据,所以我们要有结构体变量。
语法:
struct 结构体名 变量名;
变量赋值的语法:
变量名.成员名 = 数据;
例: zs.age = 16; 输出结构体:
注意:没有任何格式化控制符能够一次性输出整个结构体
我们必须一个成员一个成员的输出 结构体:可以用来保存多个不同类型的数据
可以把生活中的一些东西,抽象成结构体
*/
//这里只是定义了一个结构体类型
struct person{ float height; //身高 float weight; //体重 int age; //年龄 char gender;//性别 f代表女 female m代表男 char name[]; //姓名
}; int main(int argc, const char * argv[]) { struct person zs; //变量名:zs 类型:struct person zs.age = ; zs.gender = 'm'; zs.height = ; zs.weight = ; //zs.name = "张三"; 这是错误的
strcpy(zs.name, "张三"); printf("姓名:%s 年龄%d 性别:%c 身高%.0f\n",zs.name,zs.age,zs.gender,zs.height); return ;
}

二、结构体的初始化

/*
初始化:
1、先声明,后赋值
语法:
struct 结构体名 ;
变量名.成员名 = 数据;
例如:
struct UserInfo userInfo;
userInfo.age = 17; 2、在声明的时候初始化
a、语法:struct 结构体名 变量名 = {数据1,数据2,数据N};
例如:struct UserInfo userInfo = {1,17,"张三"};
注意:这种方式必须按结构体定义的成员顺序来赋值 b、语法:struct 结构体名 变量名 = { .成员名1=数据1, .成员名2=数据2, .成员名N=数据N};
例如:struct UserInfo userInfo = {.userId = 1, .age = 17,.userName = "张三"};//一定要按照结构体中变量的顺序来写。 3.先声明,后一次性赋值 struct 结构体名 变量名; 变量名 = (struct 结构体名){ 数据1,数据2,数据N }; 例: struct UserInfo s1;
s1 = (struct UserInfo){ 1, 17, "张三"};
*/
//先定义一个结构体
struct UserInfo{
int userId;//编号
int age; //年龄
char UserName[]; //用户名
}
#include <string.h>
int main(int argc,const char * argv[]){
struct UserInfo userInfo;
userInfo.age = ;
userInfo.userId= ;
strcpy(userInfo.UserName,"张三");
return ;
}

三、结构体的其他使用

/*
1.可以定义无限个结构体,用法跟之前说的用法完全一样(只不过是多加了几个类型而已)。 2.作用域:结构体定义在哪,那么它的作用域就在它定义的位置,到它所在的作用域结束。 3.在结构体定义的大括号后面写标识符,那么这个标识符就是这个结构体的变量.它的作用域跟它定义结构体的作用域一样 也可以同时定义多个变量,以 , 隔开。
例:
struct Person{
int age;
char name[50];
}p3,p4,p5; 4.结构体名可以省略,这样就叫匿名结构体。
例:
struct{
int age;
char name[50];
int test;
}p2;
p2就是这个匿名结构体类型的变量,可以在大括号后面写多个变量名; 5.结构体变量之间赋值都是值传递,比如说变量a赋值给变量b,b变了后,a不会改变。 6.结构体作为函数的参数是值传递,也就是说函数内改了形参的值,实参不会改变 7.结构体成员里面还可以定义别的结构体变量。
//结构体里面某个成员又是结构体变量的三种赋值方式
例如:
struct Person p1;
p1.age = 16;
p1.birthDay.year = 1990;
p1.birthDay.month = 1;
p1.birthDay.day = 1;
struct Person p2 = { 16,"刘德华",{1994,1,1}};
struct Person p3;
p3.birthDay = (struct myDate){1994,1,1};
*/ struct myDate{ int year;
int month;
int day;
}; struct Person{ int age;
char name[]; //左边是类型 右边是成员名
struct myDate birthDay; }; struct Student{ int stuNo;
char name[];
}; struct Teacher{ int age;
int salary;
char name[];
};

四、typedef的使用

/*
typedef:给某个类型起别名。
语法:typedef 类型 别名 ;
例如:
typedef int i;
i num =10;
printf("%d \n",num);
*/ typedef struct{
int age;
char name[];
}Person; //类型 struct{
int age;
char name[];
}p; //这个p是变量 //当前面加了typedef大括号后面的标识符才是类型,否则都是变量

c语言学习之基础知识点介绍(十二):结构体的介绍的更多相关文章

  1. c语言学习之基础知识点介绍(二):格式化控制符和变量的补充

    上节简单介绍了c语言中的一些基础知识点,本节将对之前介绍的不够详细的知识点进行补充. 格式化控制符的消息介绍: %d的其他控制符: 1.%md:m代表这个整数位占用多少位,m是一个整数.实际数字不足的 ...

  2. c语言学习之基础知识点介绍(十):数组

    本节主要介绍数组. 一.数组 /* 数组:一个变量可以存n个变量. 语法:类型 数组名[长度(正整数)]; 例如:int score[5];//定义了一个int类型的数组,长度为5,可以保存5个数据. ...

  3. c语言学习之基础知识点介绍(十五):函数的指针

    一.函数的指针的介绍 /* 函数指针: 函数的指针,本质上一个指针 指向函数的指针,就是一个函数指针. 回忆:我们写的源代码编译成二进制的指令集,一串交给CPU执行的指令 先存在内存里面,然后CPU读 ...

  4. c语言学习之基础知识点介绍(三):scanf函数

    本节继续介绍c语言的基础知识点. scanf函数:用来接收用户输入的数据. 语法:scanf("格式化控制符",地址列表); 取地址要用到取地址符:&(shift+7) 例 ...

  5. oc语言学习之基础知识点介绍(四):方法的重写、多态以及self、super的介绍

    一.方法重写 /* 重写:当子类继承了父类的方法时,如果觉得父类的方法不适合,那么可以对这个方法进行重新实现,那么这个就重写. 注意:也就是说,一定只能发生在父类和子类关系中. 然后是子类重新实现父类 ...

  6. oc语言学习之基础知识点介绍(二):类和对象的进一步介绍

    一.类.对象在内存中的存储 /* 内存分区: 栈:局部变量 堆:程序员自己写代码申请开辟的 程序员自己维护,编译器现在帮我们自动优化了,它在合适的给我们加上了释放空间的语句,所以我们现在写的对象不会造 ...

  7. oc语言学习之基础知识点介绍(一):OC介绍

      一.第一个OC程序 #import <Foundation/Foundation.h> //导入头文件 int main(int argc, const char * argv[]) ...

  8. c语言学习之基础知识点介绍(十四):指针的进阶

    一.指针的加.减法运算 /* 1.加法运算 1).可以跟整数进行加法运算,得到的还是一个地址 公式: 地址 + 1 = 地址 + 1 * 类型所占的字节数 地址 + n = 地址 + n * 类型所占 ...

  9. c语言学习之基础知识点介绍(二十):预处理指令

    一.预处理指令的介绍 预处理命令:在编译之前触发的一系列操作(命令)就叫预处理命令. 特点:以#开头,不要加分号. #include: 文件包含指令 把指定文件的内容复制到相应的位置 #define: ...

随机推荐

  1. GML、SVG、VML的比较

    转自:http://www.cnblogs.com/3echo/archive/2009/02/19/1394399.html GML.SVG和VML都是基于XML的可用来描述矢量图形的标记语言,都是 ...

  2. ModelSim仿真

    (1)出现“Fatal: SDF files require Altera primitive library”  书上的方法是在ModelSim-SE下的使用,而我用的是ModelSim-Alter ...

  3. [未解出,hzwer]挖掘机

    挖掘机(dig.*) 背景 附中机房谁最虚?高二一班***!感觉很顺,是吧? 题目描述 今天,丧尸czy开着挖掘机去上学(……).但是他发现他的mz满天下,所以一路上他碰到了好多他的mz.一开始他以1 ...

  4. POJ2689 - Prime Distance(素数筛选)

    题目大意 给定两个数L和U,要求你求出在区间[L, U] 内所有素数中,相邻两个素数差值最小的两个素数C1和C2以及相邻两个素数差值最大的两个素数D1和D2,并且L-U<1,000,000 题解 ...

  5. 每个android项目都应该使用的android 库

    http://blog.teamtreehouse.com/android-libraries-use-every-project A good developer knows to never re ...

  6. Windows 2003 VPN配置步骤[转]

    一,服务器端:Windows 2003 VPN代理的配置方法如下: 1.关闭防火墙,用“管理工具”中的“服务”将“Windows Firewall/Internet Connection Sharin ...

  7. Redis在PHP中的基本使用案例

    下载http://www.oschina.net/p/redis 解压后里面有:lib 源文件 .examples 例子.test测试 将lib目录拷贝到你的项目中,就可以开始你的predis操作了. ...

  8. 问题-Delphi不能进行调试模式

    问题现象:delphi不能进行调试模式 问题原因:可能是防火墙的原因,我有一次在电脑清理时,把delphi的调试程序名放在了360的黑名单中,按F9后,无法调试. 问题处理:你懂的(要不白名单,要不你 ...

  9. 新发现:原来java正则表达式不写^和$也可以运行

    最近用了好多正则表达式,都是循规蹈矩的在前面加上^在后面加上$ 像这个样子"^[.]\\S+$",但实际上我在eclipse和editplus下都试了一下,不加前缀和后缀也是可以的 ...

  10. Notepad++中的颜色属性大全

    Indent guideline style  缩进参考线的颜色 Brace highlight style 鼠标指针在框架左右时框架的颜色(如css中{}   js中的()) Bad brace c ...