iOS 阶段学习第十天笔记(结构体)
iOS学习(C语言)知识点整理
一、数据结构
1)概念:数据结构是指计算机程序中所操作的对象——数据以及数据元素之间的相互关系和运算。
2)结构体必须有struct 关键字修饰.
实例代码:
struct Person{
char name[];
int age;
float height;
};
int main(){
struct Person Tom={"Tom",,};//struct Person 是数据结构
//Tom 是变量名
Tom.age=;//通过点号访问成员变量
printf("姓名=%s;年龄=%d;身高=%.2f\n",Tom.name,Tom.age,Tom.height);
return ;
}
3)使用typedef 修饰结构体,与不使用typedef修饰的结构体的区别在于,typedef修饰的结构体不需要再加struct即可使用。
实例代码:
typedef struct Person{
char name[];
int age;
float height;
}stPerson;
int main(){
stPerson Jack={"Jack",,};//struct stPerson 是数据结构
//Jack 是变量名
Jack.age=;//通过点号访问成员变量
printf("姓名=%s;年龄=%d;身高=%.2f\n",Jack.name,Jack.age,Jack.height);
return ;
}
4)结构体集合的使用
实例代码:
int main(){
//定义了一个数组,里面可以放stPerson这种数据类型
stPerson stu[]={};
stPerson *pstu;
printf("%s",stu[].name);
for (int i=; i<; i++) {
sprintf(stu[i].name, "Jack%d",i);
stu[i].age=+i;
stu[i].height=+i;
}
pstu=stu;
//(*pstu).name等价于 pstu->name;
//pstu+i 指向里面的第i个元素
//指针通过->去访问指向的对象的成员变量
int len=sizeof(stu)/sizeof(stPerson);
for(int j=; j<len; j++) {
printf("姓名=%s;年龄=%d;身高=%.2f\n",(*pstu).name,(*pstu).age, (*pstu).height);
pstu++;
}
return ;
}
5)结构体字节对齐 #pragma pack(n) n可为1,2,4,8,16;设置系统对齐模数,按结构所有成员中最大者和对齐模数比较,与较小者对齐
实例代码:
typedef struct
{
char ch[];//单字节对齐
}aa; typedef struct
{
char ch[];
short b;//2字节对齐
}ab; typedef struct
{
char ch[];
short b;
int c;//按照4字节对齐
}ac; typedef struct
{
char ch[];
short b;
int c;
long l;//按照8字节对齐
}ad; typedef struct
{
char ch;
long l;
}ae; int main()
{
printf("sizeof(aa)=%lu\n",sizeof(aa));//
printf("sizeof(ab)=%lu\n",sizeof(ab));//
printf("sizeof(ac)=%lu\n",sizeof(ac));//
printf("sizeof(ad)=%lu\n",sizeof(ad));//
printf("sizeof(ae)=%lu\n",sizeof(ae));//
return ;
}
6)枚举 概念:一个被命名的整型常数的集合,枚举声明的关键字是 enum
注意点:
1、枚举元素之间用 “,”分隔
2、枚举第一元素如果没有赋值默认值为0,之后的元素依次加1
3、枚举是 unsigned int 类型的包装集合。
4、枚举都是常量,与宏#define相似
5、枚举的名字不能重名
实例代码:
enum weekday
{
Monday,
Tuesday,
Wednesday=,//可以人为赋值,后面在此基础+1
Thurday,
Friday=,//后面的赋值可以比前面小
Saturday,
Sunday
}; int main()
{
enum weekday day= Saturday;//enum weekday 数据类型,day变量名
printf("day=%u,sizeof(day)=%lu\n",day,sizeof(day));//结果:6,4
}
7)typedef 用法说明;typedef 老的类型 新的名字 ,给类型取个别名
实例代码:
typedef unsigned long ul;
typedef int *intp;
int add(int a,int b){
return a+b;
} //给这种函数指针取了一个新名字 pfunc
typedef int (*pfunc)(int,int);
int main()
{
ul number= ;
int a = ;
intp p = &a;
pfunc pf = add;
printf("number=%lu\n",number);
printf("*p=%d\n",*p);
printf("add=%d\n",pf(,));
return ;
}
8)结构联合体,一般联合体都是二选一,即联合体中一般只会存在两个元素,系统在初始化时只会选择其中一个内存较大的进行赋值。
实例代码:
typedef struct Person// Person可以省略,后面之用简化的名字
{
char name[];//成员变量
int age;
int height;
union{
int stuid;
char workname[];
};//共享同一段内存,按情况去解析.
//内存大小按大的计算
//初始化的时候,按照第一个解析
}stPerson; int main()
{
stPerson xiaoli={"xiaoli",,,};
stPerson xiaozhu={"kingkong",,,};
//初始化的时候,不能给最后一个成员变量赋值为字符串
printf("sizeof(stPerson)=%lu\n",sizeof(stPerson));
printf("name:%s,age:%d,height:%d,stuid:%d\n",xiaoli.name,xiaoli.age,xiaoli.height,xiaoli.stuid); //给名字字段赋值
sprintf(xiaozhu.workname,"%s","kingkong");
printf("name:%s,age:%d,height:%d,workname:%s\n",xiaozhu.name,xiaozhu.age,xiaozhu.height,xiaozhu.workname);
return ;
}
iOS 阶段学习第十天笔记(结构体)的更多相关文章
- iOS 阶段学习第十天笔记(字符串操作)
iOS学习(C语言)知识点整理 一.字符串的操作 1)字符串的存储,字符数组,在堆里面申请内存空间. 实例代码: #include <stdlib.h> #include <stri ...
- iOS阶段学习第15天笔记(NSDictionary与NSMutableDictionary 字典)
iOS学习(OC语言)知识点整理 一.OC中的字典 1)字典:是一个容器对象,元素是以键-值对(key-value)形式存放的,key和value是任意类型的对象,key是唯一的,value可以重复 ...
- iOS阶段学习第四天笔记(循环)
iOS学习(C语言)知识点整理笔记 一.分支结构 1.分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ } 两种 2.单分支 if表达式成立则执行{ }里的语句:双 ...
- iOS阶段学习第三天笔记(运算符)
iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...
- iOS 阶段学习第四天笔记(循环)
iOS学习(C语言)知识点整理笔记 一.分支结构 1.分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ } 两种 2.单分支 if表达式成立则执行{ }里的语句:双 ...
- iOS 阶段学习第三天笔记(运算符)
iOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运 ...
- iOS 阶段学习第11天笔记(OC基础知识)
iOS学习(OC语言)知识点整理 一.OC基础知识 1)#import 用于导入头文件,预处理阶段加载引用,只加载一次. 2)OC 依赖于Foundation框架下的头文件Foundation.h, ...
- iOS 阶段学习第七天笔记(函数、递归)
iOS学习(C语言)知识点整理笔记 一.函数 1)概念:具有特定功能的代码块的封装 2)函数的定义: 函数类型+函数名(形参列表) 函数类型 函数名(形参类型1 形参名1,形参类型2 形参名2 ...
- iOS阶段学习第34天笔记(UI小组件 UISegment-UISlider-UIStepper-UIProgressView-UITextView介绍)
iOS学习(UI)知识点整理 一.UI小组件 1.UISegmentedControl 分段选择器 实例代码 - (void)viewDidLoad { [super viewDidLoad]; / ...
随机推荐
- JavaScript高级-定义函数(类)方法
1.定义普通函数(常用) //1.普通函数 function defineFun1(p1, p2) { return p1 + p2; } 2.定义匿名函数(最常用) //2.匿名函数 var def ...
- Java-集合练习题1
第一题 (Map)利用Map,完成下面的功能: 从命令行读入一个字符串,表示一个年份,输出该年的世界杯冠军是哪支球队.如果该 年没有举办世界杯,则输出:没有举办世界杯. 附:世界杯冠军以及对应的夺冠年 ...
- 日志分析系统——Hangout源码学习
这两天看了下hangout的代码,虽然没有运行体验过,但是也算是学习了一点皮毛. 架构浅谈 Hangout可以说是java版的Logstash,我是没有测试过性能,不过据说是kafka这边性能要高出L ...
- Java的概述以及语法
Java的语法分为标示符和数据类型 Java的概述: 一些手打的: long l = 12345; //隐式转换 int a = (int)121234567L; //强制转换 float f =12 ...
- Atitit 常用比较复杂的图像滤镜 attilax大总结
Atitit 常用比较复杂的图像滤镜 attilax大总结 像素画滤镜 水彩油画滤镜 素描滤镜 梦幻镜 特点是中央集焦,周围景物朦化微带光晕,使人产生如入梦境的感觉.常用于拍摄婚纱.明星照,也用于其它 ...
- 每天一个linux命令(36):diff 命令
diff 命令是 linux上非常重要的工具,用于比较文件的内容,特别是比较两个版本不同的文件以找到改动的地方.diff在命令行中打印每一个行的改动.最新版本的diff还支持二进制文件.diff程序的 ...
- webpack配置详解
webpack配置详解 先点个赞吧,再挨个点下面的连接,觉得不值这个赞的回来骂我啊. Webpack傻瓜式指南(一) Webpack傻瓜指南(二)开发和部署技巧 Webpack傻瓜式指南 原生的官网详 ...
- 快速入门系列--JMeter压测工具
今天的年会已过,仍然是空手而归,不过俺坚信能让生活稳定永远都是努力.由于隔壁组负责年会的抢红包项目,因而趁此机会把通过工具模拟高并发的知识补了补,通过和身边大师的交流,总算是对压力测试有了个简要的了解 ...
- angularJS之事件处理
angularJS的事件不像js一样,会默认有冒泡和捕获,还有angularJS之间的同名控制器之间,也只是同名, 不会让他们关联起来,就是这个名字的控制器的数据的改变不会影响到另一个同名的控制器. ...
- angularJS自定义那些事
angularJS在数据处理方面很优秀. 使用angularJ给我感觉就像在写模板,然后对模板填入内容,只是这些内容不在是 在html页面编写,而是以数据的方式添加进去,这个也大大提高了编写的效率. ...