C语言结构体学习笔记

======================================================================================================
                                            结 构 体
=============================================================================================================


构造数据类型:构造数据类型根据已定义的一个或多个数据类型用构造的方法来定义的。


“结构”是一种构造类型,它是由若干“成员”组成的,每一个成员可以使一个基本数据类型或者又是一个构造类型。


============================================================================================================


结构体变量的初始化:(尤其注意字符类型的元素)


1. 先定义结构体变量,然后再初始化:
       
struct student {
int age;
float height;
char name[21];
};                           //创建结构体
struct student stu1;                 //定义结构体变量


stu1.age = 18;      //给stu1结构体中的age变量初始化,赋值
stu1.height = 165.5f;
strcpy(stu1.name,"Lady Gaga");    //使用字符操作函数才能把字符串的内容复制进字符数组




---------------------------------------------------------------------------------------






2. 定义结构体变量同时,进行初始化:


struct student {
int age;
float height;
char name[21];
};       
struct student stu1 = {18,165.5f,"Lady Gaga"};    //定义结构体变量的同时进行初始化,初始化值的顺序要和定义结构体的顺序一致!


---------------------------------------------------------------------------------------


3.定义结构体的同时,还可以指定元素的初始化:


struct student {
int age;
float height;
char name[21];
};       
struct student stu1 = {.name = "Lady Gaga"};   //部分元素的初始化


---------------------------------------------------------------------------------------


4.使用指针变量引用结构体中的元素:


struct student {
int age;
float height;
char name[21];
};       
struct student *p, stu1;          //定义指针变量和结构体变量
p = stu1;                         //将指针指向结构体变量
strcpy((*p).name, "Lady Gaga");   //可以使用 (*p).name 引用name元素
===========================================================================================================================


结构体数据成员对齐可以提升读取数据的效率;


===========================================================================================================


计算结构体变量在内存中占用的字节数的方法:


1. 先找对齐模数;
          对齐模数:是结构体中的基本数据类型中占用字节数最大的那个; 
2. 在计算结构体变量中的各个成员占用的字节和


=================================================================================================================


结构体作用域:
1.全局结构体:定义在函数外面的结构体。
2.局部结构体:定义在函数内部的结构体。
           与全局结构体同名的局部结构体,会把之前的全局结构体覆盖。


================================================================================================


结构指针的定义和初始化:


一个指针变量当用来指向一个结构变量是,称之为结构指针变量。结构指针变量中的值是所指向的结构变量的首地址。


结构指针变量说明的一般形式为:
    
            struct  结构名 *结构指针变量名;
例如:
   
            struct stu *pstu;   //定义了指针只能指向stu结构体类型的结构体变量
-----------------------------------------------------------------------------------------------------------


struct Car{


int lunzi;
int speed;


}car1;
struct Car *p = &car1;


结构体名:Car
结构体变量名:car1
结构体指针:p


--------------------------------------------------------------------------------------------------------


结构体指针间接访问成员值


其访问的一般形式为:


          (*结构指针变量).成员名;
或为:
 
          结构指针变量->成员名;


=============================================================================================================


结构体嵌套使用


 成员也可以又是一个结构,即构成了嵌套的结构


//结构体嵌套:结构体定义的里面有其他结构体
//结构体不可以嵌套自己变量,可以嵌套指向自己这种类型的指针
 
-----------------------------------------------------------------------------------------


结构体的嵌套的注意事项:
1. 结构体定义中可以嵌套其他结构体类型的变量
   不可以嵌套自己这个类型的变量;




=======================================================================


结构体变量及成员作为函数参数:


1.用结构体变量的成员值作为函数的参数,实质是值传递;
2.用结构体变量作为函数的参数; 
3.用结构体指针作为函数的参数;


==================================================================================


枚举类型介绍及定义


C语言提供了一种称为“枚举”的类型,在枚举类型的定义中列举出所有可能的取值,被说明为该
“枚举”类型的变量取值不能超过定义的范围。


应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。
------------------------------------------------------------------------------------------------


1. 枚举类型
枚举类型定义的一般形式为:


                 enum 枚举类型名{枚举值表};


在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。 


2.关于枚举类型元素的命名习惯
        enum iColor(kIcolorWhite,kIcolorBlack,kIcolorTHJ);
------------------------------------------------------------------------------------
枚举变量的定义和使用


1. 先定义枚举类型,在定义枚举变量


      enum 枚举类型名 枚举变量名列表;
   如:
      enum iColor iPhoneColor;    //iPhoneColor的取值是有要求的


--------------------------------------------------------------------------
2.定义枚举类型的同时,定义变量


      enum Sex{kSexMan,kSexWomen,kSexYao} isex;


--------------------------------------------------------------------------
3. 枚举变量的值


枚举类型定义完成以后,系统会自动给枚举的每个元素都会赋值一个整形的初值;
默认初值:从第一个元素开始值为0,以后每个元素的值,是上一个元素的值+1(像数组的下标);


手动赋值:


           enum iColor(kIcolorWhite,kIcolorBlack = 3,kIcolorTHJ); 
                             0              3             4


如上(0.3.4)就是手动赋值的结果。


================================================================================================= 


C语言目前学了5个类型:基本数据,空,构造,指针,定义类型。


typedef 关键字介绍


typedef定义的一般形式为:


                       typedef 原类型名 新类型名;


其中原类型名中含有定义部分,新类型名一般用大写表示,以便于区别。
又是也可用宏定义来代替typedef的功能,但是宏定义是由预处理完成的,而typedef则是
在编译时完成的,后者更为灵活方便。


------------------------------------------------------------------------------------


typedef 使用方法:


1.基本数据类型:


               typedef int MALATANG;


2.用在数组,给数组起别名:


               typedef int ARRAY[5];    //int a[5]; 数组长度为5 | 相当于自定义了一个长度为5的数组类型ARRAY。
               ARRAY a1,b1;             //相当于 int a1[5],bi[5]


3.给结构体起别名:


           (1).   
                   struct Person p1={"zbz",18};
               
                   typedef struct Person P;  //给 struct Person 起个别名P
           
           (2).    
                   typedef struct Car {
                         int lunzi;
                         int speed;
                   }MYCAR;         //表示把结构体起个别名MYCAR
                   
                   MYCAR car1 = {1,200};


4.给枚举类型起别名:


                   方法参考给结构体起别名,是一样的。


5.给函数指针起别名:


int sum(int a, int b) {                 //定义两个函数
return a + b;
}
int jian(int a, int b) {
return a - b;
}


int main() {                        

typedef int(*p)(int, int);         //给函数指针起别名p
p f1, f2;                          //定义变量f1,f2
f1 = jian;                         
printf("%d\n",f1(3,6));


return 0;
}


===========================================================================================================







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值