zoukankan      html  css  js  c++  java
  • 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
    ",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
    ",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
    ",(*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
    ",sizeof(aa));//3
    36     printf("sizeof(ab)=%lu
    ",sizeof(ab));//6
    37     printf("sizeof(ac)=%lu
    ",sizeof(ac));//12
    38     printf("sizeof(ad)=%lu
    ",sizeof(ad));//24
    39     printf("sizeof(ae)=%lu
    ",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
    ",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
    ",number);
    16     printf("*p=%d
    ",*p);
    17     printf("add=%d
    ",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={"kingkong",26,160,60};
    18     //初始化的时候,不能给最后一个成员变量赋值为字符串
    19     printf("sizeof(stPerson)=%lu
    ",sizeof(stPerson));
    20     printf("name:%s,age:%d,height:%d,stuid:%d
    ",xiaoli.name,xiaoli.age,xiaoli.height,xiaoli.stuid);
    21 
    22     //给名字字段赋值
    23     sprintf(xiaozhu.workname,"%s","kingkong");
    24     printf("name:%s,age:%d,height:%d,workname:%s
    ",xiaozhu.name,xiaozhu.age,xiaozhu.height,xiaozhu.workname);
    25     return 0;
    26 }
  • 相关阅读:
    《TZOJ1546》
    css3的基本样式
    PHP连接mysql数据库,并将取出的数据以json的格式输出
    使用ajax获取JSON数据的jQuery代码的格式
    使用构造函数来判断一个对象是数组还是日期
    js(jquery)代码在页面上实时地显示时间
    点分治总结
    线性基,高斯消元总结
    网络流总结
    后缀数组总结
  • 原文地址:https://www.cnblogs.com/ChinaKingKong/p/4605717.html
Copyright © 2011-2022 走看看