iOS基础(c)-结构体

原创 2015年07月11日 08:42:43

------ 知之博客 期待与您交流! -------


一 结构体的概念

    结构是由基本数据类型构成的、并用一个标识符来命名的各种变量的组合。结构中可以使用不同的数据类型。


二 结构体的定义
    1.结构体定义的格式  

      struct 结构体名{
           成员列表;
       };      //注意此处的分号不能省
    比如要定义一个汽车的结构体 

   struct Car{
          char *color;
          int lunzi;
          int speed;
        };
    定义一个iPhone的结构体
      struct iPhone{
          char *color;
          float  screenSize;
          int  sn;
          int  imei;
      };
    定义一个学生的结构体
       struct Student{
         char name[20];
         char sex;
         int age;
         float score;
         int sno;
      };
    2.结构体定义的三种方法
 
        1)先定义结构体,然后在定义结构体变量
     struct Student{
         //学生学号
         int sno;
         //学生姓名
         char name[21];
         //学生年龄
         int age;
         //学生成绩
         float score;
      };
 
      注意:
        1)结构体定义完成以后,计算机并不会给结构体分配内存空间
        2)会在定义结构体变量后,分配存储空间
 
      结构体变量定义格式:
      struct  结构体名  结构体变量名;
 
          struct  Student  stu1;    //这句话表示定义一个Student结构体类型的变量,变量的名称是stu1;
                                              //stu1因为是Student类型,stu1可以存放学生的学号、姓名、年龄、成绩
          struct  Student  stu4, stu2, stu3;       //定义多个结构体变量
 
       2)定义结构体的同时,定义结构体变量
       格式
         struct 结构体名 {
          }结构体变量1,结构体变量2....;

          例如:
        
      struct Student{
             //学生学号
             int sno;
             //学生姓名
             char name[21];
             //学生年龄
             int age;
             //学生成绩
             float score;
         }stu5,stu6,stu7; //也是用Student结构体定义了三个结构体变量
         //名称分别为 stu5,stu6,stu7
       3)使用匿名结构体定义结构体变量
     struct {
        }结构体变量1,结构体变量2....;
 
        struct {
 
           char *color;
           int lunzi;
           int speed;
 
     }car1,car2,car3;

三 结构体变量中成员的访问方法
    通过一个结构体的指针,如何去访问它的各个变量,得到它们的值。其中变量有指针变量,也有实变量。

    #include <stdio.h>
    int main(int argc, const char * argv[]) {   
    //定义一个Car类型的结构体
    struct Car{
        char *pp;
        int lunzi;
        int speed;
    };
    
    //用结构体类型,定义结构体变量
    struct Car car1;
    /*
      car1
     
      pp   "奥拓"
      lunzi  4
      speed 350
     
      car2
      pp   "时风"
      lunzi  3
      speed  180
     */
    
    //获取结构体变量中的成员
    // 获取品牌   car1.pp
    // 获取轮子   car1.lunzi
    // 获取速度   car1.speed
    
    //访问时风  car2.pp
    
    return 0;
    }

四 结构体成员变量的初始化
    1. 先定义结构体变量,然后再初始化
    2.定义结构体变量的同时,进行初始化
    3.定义结构体的同时,还可以指定元素的初始化

    例如:

    #include <stdio.h>
    #include <string.h>
    int main(int argc, const char * argv[]) {
 
    struct Student{    
        //学生学号
        int sno;
        //学生姓名
        char name[21];
        //学生年龄
        int age;
        //学生成绩
        float score;
    };
    
    //<span style="color:#336666;"><strong>1.先定义结构体变量,然后再初始化</strong></span>
    struct Student stu1;  //占用字节数?
    
    //给结构体变变量初始化
    stu1.sno = 38;
    stu1.age = 18;
    stu1.score = 59.99f;
    char name1[21]="张三丰";
    //name1 = "张无忌";
    strcpy(stu1.name, "张三丰a");
    
    printf("学号:%d\n年龄:%d\n分数:%.2f\n姓名:%s\n",stu1.sno,stu1.age,stu1.score,stu1.name);
    //1、stu1.name 占用多个字节   21
    printf("stu1.name %ld\n",sizeof(stu1.name));
    //2、stu1.name 字符串长度是多少
    //汉字的编码问题
    // UTF-8  xcode中默认的中文的编码是utf-8格式
    //        国际通用编码 一个汉字占用 3个字节
    // GB2312 GBK  国标 一个汉字占用2个字节
    printf("stu1.name 长度:%ld\n",strlen(stu1.name));
    
    //stu1.name = "zbz";  //
    
    
    //<strong><span style="color:#336666;">2、定义结构体变量的同时,进行初始化</span></strong>
    //初始化值得顺序要和定义结构体的顺序一致
    struct Student stu2={8,"凤姐",18,49.99f};
    printf("\n\n学号:%d\n年龄:%d\n分数:%.2f\n姓名:%s\n",stu2.sno,stu2.age,stu2.score,stu2.name);
    
    //<span style="color:#336666;"><strong>3、定义结构体的同时,还可以指定元素的初始化</strong></span>
    struct Student stu3={.name = "lady Gaga"};
    return 0;
    }

五 结构体变量占用存储空间大小

    #include <stdio.h>

    int main(int argc, const char * argv[]) {
    
    //<span style="color:#339999;"><strong>计算结构体变量在内存中占用的字节数的方法</strong></span>
    //<span style="color:#339999;">1)先找对齐模数</span>
    //  <span style="color:#339999;">对齐模数 是结构体中的基本数据类型中占用字节数最大的那个</span>
    //          <span style="color:#006600;">4</span>
    //<span style="color:#339999;">2)在计算结构体变量的中各个成员占用的字节和</span>
    
    struct A{
    
        char ch[13];
        char ch1[11];
        int a;
   
    };
    //定义结构体变量
    struct A a1;
    printf("%ld\n",sizeof(a1));
    
    return 0;
    }

六 结构体与指针的联系   

    首先定义一个结构体类型,然后定义这种类型的变量和指针:

   struct unit {
	char c;
	int num;
   };
   struct unit u;
   struct unit *p = &u;

    要通过指针p访问结构体成员可以写成(*p).c(*p).num,为了书写方便,C语言提供了->运算符,也可以写成p->cp->num

    想要了解更多指针的内容,请查看文章《黑马程序员—iOS基础(c)—指针》


  

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

iOS基础(foundation)-常用结构体

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------     在Foundation中定义了很多常用结构体类型来简化我们的日常开发,这些结构体...

蓝鸥iOS从零基础到精通就业-C语言入门 13结构体一

蓝鸥iOS从零基础到精通就业-C语言入门 13结构体一

黑马程序员--iOS--C基础(结构体)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

黑马程序员--ios基础--c语言--结构体、枚举

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------  一.结构体的定义及简单使用 数组:职能由多个相同类型的数据构成结构体:可以由多个不...

C-结构体

1、什么是结构体: 多种类型变量的集合 跟数组的不同之处:数组虽然也能存多个数据,但是只能存同类型的数据。但是结构体是不 光能存多个数据,并且可以允许数据是不同类型的。2、为什么需要结构...

黑马程序员-ios学习笔记 c语言 结构体

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------   构造类型定义: 由一个或者多个已定义类型的元素用构造的方法,构造新的类型   构造类型分...

IOS开发之C基础-循环结构

概述:循环结构时是程序中一个很重要的结构,其特点是在给定的条件成立时,会反复执行某代码段,直到条件不成立时为止。虽然是不断的重复,但允许细节方面有些不同。给定的条件就是循环条件,反复执行的代码段就是循...
  • Mac_G
  • Mac_G
  • 2015-11-01 13:49
  • 173

【IOS 开发学习总结-OC-7.5】objective-c 的c语言特性——结构体

有时候,程序需要多个基本类型的组成一个有机整体,比如说定义一个矩形,就需要 x,y,width,height 4个值。这就需要使用 语言提供的结构体。 定义结构体 语法格式: struct...

C结构体基础

结构体数组,以及结构体的基本操作 /************************************************************************* > Fi...

黑马程序员--C基础--构造类型和结构体

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-1、构造类型1–构造类型:构造类型是根据已定义的一个或多个数据类型用构造的方法来定义的。 2–C语言中的构造类型...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)