IOS 阶段学习第十天笔记(结构体)

IOS学习(C语言)知识点整理

一、数据结构

1)概念:数据结构是指计算机程序中所操作的对象——数据以及数据元素之间的相互关系和运算。

2)结构体必须有struct 关键字修饰.

实例代码:

 1 struct Person{
 2     char name[20];
 3     int age;
 4     float height;
 5 };
 6
 7 int main(){
 8     struct Person Tom={"Tom",22,180};//struct Person 是数据结构
 9     //Tom 是变量名
10     Tom.age=33;//通过点号访问成员变量
11     printf("姓名=%s;年龄=%d;身高=%.2f\n",Tom.name,Tom.age,Tom.height);
12     return 0;
13 }

3)使用typedef 修饰结构体,与不使用typedef修饰的结构体的区别在于,typedef修饰的结构体不需要再加struct即可使用。

实例代码:

 1 typedef struct Person{
 2     char name[20];
 3     int age;
 4     float height;
 5 }stPerson;
 6
 7 int main(){
 8     stPerson Jack={"Jack",36,178};//struct stPerson 是数据结构
 9     //Jack 是变量名
10     Jack.age=25;//通过点号访问成员变量
11     printf("姓名=%s;年龄=%d;身高=%.2f\n",Jack.name,Jack.age,Jack.height);
12     return 0;
13 }

4)结构体集合的使用

实例代码:

 1 int main(){
 2    //定义了一个数组,里面可以放stPerson这种数据类型
 3     stPerson stu[10]={};
 4     stPerson *pstu;
 5     printf("%s",stu[0].name);
 6     for (int i=0; i<10; i++) {
 7          sprintf(stu[i].name, "Jack%d",i);
 8          stu[i].age=10+i;
 9          stu[i].height=170+i;
10     }
11     pstu=stu;
12     //(*pstu).name等价于 pstu->name;
13     //pstu+i 指向里面的第i个元素
14     //指针通过->去访问指向的对象的成员变量
15     int len=sizeof(stu)/sizeof(stPerson);
16     for(int j=0; j<len; j++) {
17     printf("姓名=%s;年龄=%d;身高=%.2f\n",(*pstu).name,(*pstu).age,  (*pstu).height);
18     pstu++;
19   }
20  return 0;
21 }

5)结构体字节对齐  #pragma pack(n)  n可为1,2,4,8,16;设置系统对齐模数,按结构所有成员中最大者和对齐模数比较,与较小者对齐

实例代码:

 1 typedef struct
 2 {
 3     char ch[3];//单字节对齐
 4 }aa;
 5
 6  typedef struct
 7 {
 8     char ch[3];
 9     short b;//2字节对齐
10 }ab;
11
12 typedef struct
13 {
14     char ch[3];
15     short b;
16     int c;//按照4字节对齐
17 }ac;
18
19 typedef struct
20 {
21     char ch[3];
22     short b;
23     int c;
24     long l;//按照8字节对齐
25 }ad;
26
27 typedef struct
28 {
29     char ch;
30     long l;
31 }ae;
32
33 int main()
34 {
35     printf("sizeof(aa)=%lu\n",sizeof(aa));//3
36     printf("sizeof(ab)=%lu\n",sizeof(ab));//6
37     printf("sizeof(ac)=%lu\n",sizeof(ac));//12
38     printf("sizeof(ad)=%lu\n",sizeof(ad));//24
39     printf("sizeof(ae)=%lu\n",sizeof(ae));//16
40     return 0;
41 }

6)枚举  概念:一个被命名的整型常数的集合,枚举声明的关键字是 enum

注意点:

1、枚举元素之间用 “,”分隔

2、枚举第一元素如果没有赋值默认值为0,之后的元素依次加1

3、枚举是 unsigned int 类型的包装集合。

4、枚举都是常量,与宏#define相似

5、枚举的名字不能重名

实例代码:

 1 enum weekday
 2 {
 3     Monday,
 4     Tuesday,
 5     Wednesday=10,//可以人为赋值,后面在此基础+1
 6     Thurday,
 7     Friday=2,//后面的赋值可以比前面小
 8     Saturday,
 9     Sunday
10 };
11
12 int main()
13 {
14     enum weekday day= Saturday;//enum weekday 数据类型,day变量名
15     printf("day=%u,sizeof(day)=%lu\n",day,sizeof(day));//结果:6,4
16 }

7)typedef 用法说明;typedef 老的类型 新的名字 ,给类型取个别名

实例代码:

 1 typedef unsigned long ul;
 2 typedef int *intp;
 3 int add(int a,int b){
 4     return a+b;
 5 }
 6
 7 //给这种函数指针取了一个新名字 pfunc
 8 typedef int (*pfunc)(int,int);
 9 int main()
10 {
11     ul number= 100;
12     int a = 20;
13     intp p = &a;
14     pfunc pf = add;
15     printf("number=%lu\n",number);
16     printf("*p=%d\n",*p);
17     printf("add=%d\n",pf(10,20));
18     return 0;
19 }

8)结构联合体,一般联合体都是二选一,即联合体中一般只会存在两个元素,系统在初始化时只会选择其中一个内存较大的进行赋值。

实例代码:

 1 typedef struct Person// Person可以省略,后面之用简化的名字
 2 {
 3     char name[20];//成员变量
 4     int age;
 5     int height;
 6     union{
 7         int stuid;
 8         char workname[20];
 9     };//共享同一段内存,按情况去解析.
10     //内存大小按大的计算
11     //初始化的时候,按照第一个解析
12 }stPerson;
13
14 int main()
15 {
16     stPerson xiaoli={"xiaoli",18,180,97};
17     stPerson xiaozhu={"xiaozhu",26,160,60};
18     //初始化的时候,不能给最后一个成员变量赋值为字符串
19     printf("sizeof(stPerson)=%lu\n",sizeof(stPerson));
20     printf("name:%s,age:%d,height:%d,stuid:%d\n",xiaoli.name,xiaoli.age,xiaoli.height,xiaoli.stuid);
21
22     //给名字字段赋值
23     sprintf(xiaozhu.workname,"%s","qianfeng");
24     printf("name:%s,age:%d,height:%d,workname:%s\n",xiaozhu.name,xiaozhu.age,xiaozhu.height,xiaozhu.workname);
25     return 0;
26 }
时间: 2024-11-07 10:01:16

IOS 阶段学习第十天笔记(结构体)的相关文章

IOS 阶段学习第十天笔记(字符串操作)

IOS学习(C语言)知识点整理 一.字符串的操作 1)字符串的存储,字符数组,在堆里面申请内存空间. 实例代码: #include <stdlib.h> #include <string.h> int main(){ char str[100] = "hello world"; char *p = "hello world"; //*p ='H';//常量字符串不可以修改,p指向只读的地址 p = str; *p = 'H'; // prin

IOS阶段学习第15天笔记(NSDictionary与NSMutableDictionary 字典)

IOS学习(OC语言)知识点整理 一.OC中的字典 1)字典:是一个容器对象,元素是以键-值对(key-value)形式存放的,key和value是任意类型的对象,key是唯一的,value可以重复 2)OC中的字典有两种 1.不可变字典:NSDictionary,初始化后不能修改其内容 2.可变字典:NSMutableDictionary,初始化后可以修改其内容 二.NSDictionary 字典的操作 1)实例化方法创建字典对象 例如: 1 NSDictionary *dict1=[[NSD

IOS阶段学习第三天笔记(运算符)

                                         IOS学习(C语言)知识点整理笔记 1.运算符 一.算术运算符 1)表达式由变量.常量.运算符构成,有确定的类型和值 2)算术运算符包括: +(加),-(减),*(乘),/(除),%(模) 3)算术运算符优先级 括号()> * ,/ ,%  >+,- 4)%表示取余.取模  a%b 表示a除以b取余数 5)整数相除保留两位小数处理方法如: printf(“%.2f”,(float)14/9); 6)自增自减运算符

IOS阶段学习第四天笔记(循环)

    IOS学习(C语言)知识点整理笔记 一.分支结构 1.分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ }  两种 2.单分支 if表达式成立则执行{ }里的语句:双分支 if表达式不成立 则执行else{ }里面的语句 3.字符串的输出系统会从数组地址一直打印到字符 ‘\0’为止,如果没有正确初始化,可能会打印出数组外的信息 4.如果分支结构里面只有一条执行语句可省略外面的大括号{} . 二.开关语句 1.语句结构 :switch (参数) case

IOS 阶段学习第24天笔记(Block的介绍)

IOS学习(OC语言)知识点整理 一.Block 的介绍 1)概念: block 是一种数据类型,类似于C语言中没有名字的函数,可以接收参数,也可以返回值与C函数一样被调用 封装一段代码 可以在任何地方调用 block 也可以作为函数参数,以及函数返回值 2)Block 实例代码 1 //定义了一个block类型MyBlock,MyBlock类型的变量只能指向带两个int的参数和返回int的代码块 2 typedef int (^MyBlock)(int,int); 3 //定义一个函数指针 4

IOS 阶段学习第25天笔记(IOS沙盒机制介绍)

IOS学习(OC语言)知识点整理 一.IOS沙盒机制介绍 1)概念:每个ios应用都有自己的应用沙盒,应用沙盒就是文件系统目录,与其他应用放入文件 系统隔离,ios系统不允许访问 其他应用的应用沙盒,但在ios8中已经开放访问(extension) 2)extension是ios8新开放的一种对几个固定系统区域的拓展机制,它可以在一定程度上弥补ios的沙盒机制对应用间的通信限制 3)应用沙盒一般包括以下几个文件目录: 1.应用程序包:包含所有资源文件和可执行文件 2.Documents:保存应用

IOS 阶段学习第22天笔记(JSON数据格式)

IOS学习(OC语言)知识点整理 一.JSON数据格式 1)概念:json是一种网络数据传输格式,有值/对象:{“A”:1,”B”:”2”…}词典:对象的序列:[,,,,,]数组两种数据类型 2)URLWithString 将字符串网址封装成NSURL对象 例如: 1 NSString *urlStr=@"http://10.0.8.8/sns/my/user_list.php?number=20 2 &page=";//get post 3 NSURL *url=[NSURL

IOS阶段学习第17天笔记(OC中文件的操作)

IOS学习(OC语言)知识点整理 一.单例模式 1)单例是一种编程思想,一个设计模式,与语言无关在采用了单例对象的应用程序中,需要单例类自行提供实例化单例对象, 不管实例化单例对象多少次,只有一个对象存在,这个对象是全局的,能够被整个应用程序共享,访问 2)使用单例模式时使用类提供的类方法获取单例对象,尽量不要用alloc init的方法获取单例对象 3)单例类提供类方法获取单例对象时类方法一般以sharedXX/standedXX/defaultXX开头 实例代码: #import "Plan

IOS阶段学习第13天笔记(NSString与NSMutableString)

IOS学习(OC语言)知识点整理 一.OC字符串的操作 1)OC中字符串分为两种: 1.不可变字符串NSString:不能修改对象内容,但是可以改变对象的指针. 2.可变字符串NSMutableString:可以修改对象内容. 二.NSString 不可变字符串的操作 1)将字符串常量对象直接赋值给字符串引用 NSString *[email protected]"hello"; 字符串对象的输出格式:NSLog(@"str1=%@",str1). 2)initWi