您的位置:首页 > 编程语言 > C语言/C++

C语言中结构体的认识

2016-01-12 22:11 417 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/u013774062/article/details/50507164 1,结构体是什么
       结构体是组合数据类型的一种,其成员类型可以是相互关联的基本数据类型也可以是结构体  类型
2,使用场合
       当要处理大量有关联的不同数据类型的时候,例如一个学生的信息,有学号(int),姓名(char *),年龄(int)等信息,就可以使用结构体,大大提高效率
3,怎么用
         (1)声明或者说定义结构体类型
       与基本数据变量的定义不同,由于系统已经知道基本数据类型的结构,类型名 变量名
就可以搞定,但是结构体是用户自己定义的,
首先要声明或定义结构体类型,告诉系统有这个类型,是怎么样的,定义结构体类型的方式为:  使用关键字struct 后面跟上类型名
  struct 类型名
  {
成员列表;//成员类表就是成员的  类型  名字;类型可以是基本数据类型,也可以是结构体类型
  }

 如:struct Student
     {
  int    num;
  char   name[20];
  char   sex;
  int    age;
  char   address[20];
     }; //这样就定义了一个结构体类型Student,内部包含学生的各种信息

(2)定义结构体变量
     
在声明结构体类型(相当于一个模板)后就可以定义结构体变量了,主要有三种方式:
     1> >  声明结构体类型和定义结构体变量分开(最常用和灵活的方式)
     struct Student
     {
  int    num;
  char   name[20];
  char   sex;
  int    age;
  char   address[20];
      };//在声明了结构体类型struct Student后,定义结构体变量
      
     struct Student studnet1,student2;//定义了两个结构体变量student1和student2
   
    2>>  在声明结构体类型的同时定义结构体变量。如:
  struct Student
     {
  int    num;
  char   name[20];
  char   sex;
  int    age;
  char   address[20];
}studnet1,student2;
3>> 在声明结构体类型的同时定义结构体变量(匿名对象),但是没有类型名 如:
  struct 
     {
  int    num;
  char   name[20];
  char   sex;
  int    age;
  char   address[20];
}studnet3;
           
4,使用注意
         1>>   结构体类型和结构体变量是两个不同的概念,结构体类型相当于一个模板,在编译时是
                    不分配存储空间的,只对定义的.
        结构体变量按照模板的定义分配相应的存储空间,这样的话只能对结构体变量赋值,存
        取和运算,而不能对结构体类型进行赋值,存取和运算
2>> 同一作用域内不可重复定义结构体类型和结构体变量,匿名类型对象除外
3>>  可在函数内也可在函数外,效果及用法类似于局部变量和全局变量,也可以嵌套定义
4>>  可在函数内外定义同一个结构体类型,同样遵循就近原则
5>> 只有在定义结构体变量的同时才能批量初始化,定义结构体变量后,只能一个一个的初                   
         始化
5,与数组的区别
        1>> 结构体可以存不同类型的元素,而数组只能存同一类型
        2>> 结构体类型需要我们自已定义.数组是用别的类型加[元素个数]
        3>> 结构体内存分配方式很特别,使用对齐原则,不一定是所有元素的字节数和,而数组一定是 所   
                有元素的字节数和.
        4>>  结构体指针可以指针名->结构体元素名(取元素);数组不行
6,结构体数组
           结构体数组本质是数组,数组元素是同一类型的结构体变量,例如定义一个Student结构体
数组用于存放一个班级所有学生的信息
7,结构体指针
            是指向结构体变量的指针,用法如下
struct Person
{
char *name;
int age;
}; // 定义结构体类型

struct Person per={"wangjintaof",2};//定义结构体变量的同时批量初始化
struct Person *p=&per; //定义指向结构体类型的指针,并初始化,使其指向per
然后就可以用指针引用和访问结构体变量的元素了,具体三种方式如下
1>>>. P->name = "wangjintao";//给name成员变量赋值
2>>>. (*p).name = "wangjitnao";//给name成员变量赋值、
3>>>.    Per.name="wangjitnao";
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: