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)—指针》


  

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

结构体中的占位符用法

typedef union { struct x{ char a1 : 2; char b1 : 3; char c1 : 3; }x1; ...
  • ameyume
  • ameyume
  • 2011年03月21日 20:07
  • 4446

ios 打印 结构体

我们经常会输出一些坐标尺寸信息之类的,比如view的frame,是CGRect类型的,用frame.oringial.x 和frame.size.width来做NSLog参数好麻烦,还好苹果对这些常用...
  • zuojinmin
  • zuojinmin
  • 2016年04月19日 13:39
  • 1095

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

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

高效率、灵活打印结构体串(C语言版)

C语言中很多时候把结构体当做字符串使用。 例如一个简单的报文协议: 命令类型 4字节 //通信测试报文  “1001”         交易系统ID   2字节         版本号     10字...
  • lilei_cool1
  • lilei_cool1
  • 2015年11月20日 10:41
  • 2325

结构体与NSData的转换

一、结构体typedef struct { UInt16 tag; UInt16 length; }Info; 二、相互转换 Info info; info.tag = 0...
  • u012198553
  • u012198553
  • 2017年06月05日 17:39
  • 335

IOS_Struct结构体与NSObject对象的通用互转方法

这个应该是Struct结构体与NSObject对象的通用互转方法。 本文来自【小编我】 仅仅是个例子,自己举一反三。 遇到一个问题,如何将要MKCoordinateRegion 与 NSObj...
  • u011220580
  • u011220580
  • 2013年08月06日 21:15
  • 2743

Objective-C:结构体和对象

1 结构体 1.1 结构体定义 typedef struct { int year; int month; int day; }Date; 1.2 结构体的赋值 // ...
  • Yahiko1991
  • Yahiko1991
  • 2016年12月13日 11:39
  • 172

ios学习之旅------玩转结构体

1.全局变量和局部变量 局部变量:     概念:定义函数内部变量     定义格式:变量类型 变量名称;     作用域:从定义那一行开始到所在代码块结束     生命周期:从代码执行到定...
  • sdzh2012
  • sdzh2012
  • 2015年08月20日 09:34
  • 3272

iOS开发中结构体的另一种“初始化方法”

结构体的另类“初始化方法”
  • qinqi376990311
  • qinqi376990311
  • 2017年06月19日 10:26
  • 543

C结构体之位域(位段)结构体大小

struct Cstruct { int x:1; int y:14; int Z:32; int W:1; }; ret=sizeof(struct Cstruct); =12 //硬是没...
  • kaizi318
  • kaizi318
  • 2013年11月18日 17:42
  • 4826
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS基础(c)-结构体
举报原因:
原因补充:

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