【第22期】观点:IT 行业加班,到底有没有价值?

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--C基础(结构体)

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

NSValue对任何结构体,基本类型,指针的封装

    任何结构体: 一个NSValue对象是用来存储一个C或者Objective-C数据的简单容器。它可以保存任意类型的数据,比如int,float,char,当然也可以是指pointers, structures, and object ids。NSValue类的目标就...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

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

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

Objective-C初探

Objective-C简介(简称OC) 基于C语言,增加了最小的面向对象语法,完全兼容C语言 Mac OS X和 iOS平台的开发语言 可以购入C、C++代码 OC语法纵览1 OC中没有类似Java中的包名这个概念,取而代之的是程序设计师必须给类名加上前缀,使用前缀可以有效的防止名称冲...

蓝鸥iOS从零基础到精通就业-C语言入门 15函数结构体练习

蓝鸥iOS从零基础到精通就业-C语言入门 15函数结构体练习
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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