黑马程序员--学习C语言条件编译

结构数组概念

结构数组的每一个元素都是具有相同结构类型的下标结构变量,用来存放大量的结构域相同的结构体变量 。

结构体数组定义:

    struct student{

       int num;

       char name[20];

       char sex; 

       float score;

    }stu[5];


结构体指针定义和初始化

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

结构指针变量说明的一般形式:

struct 结构名  * 结构指针变量名

例:

    struct car {

       int color;

       int speed;  

    };

   struct car car1;

   struct car *p=&car1;


用结构体指针间接访问结构体变量的成员值

两种方法:

1)(*p).color  

      (*p).speed

2) p->color

p->speed


结构体嵌套使用

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

       struct date{

       int year;

       int month;

       int day;

   };

       struct student {

       char *name;

       float score;

       struct date birthday;

       int age; 

   };

       struct student stu={"Fread",98.44f,{2012,12,12},12};

       printf("姓名:%s,分数:%.2f,生日:%02d-%02d-%02d,龄:%d",stu.name,stu.score,stu.birthday.year,stu.birthday.month,stu.birthday.day,stu.age);




2)结构体嵌套自身的指针

   struct Person {

       char *name;

       int age;

       struct Person *child;

   };

   structPerson kim={"kim",8,NULL};

   structPerson p1={"林志颖",38,&kim};

   printf("%s的儿子是 %s,年龄:%d",p1.name,p1.child->name,p1.child->age);


注意事项:

      结构体定义中可以嵌套其他结构体类型的变量

      不可以嵌套自己这个类型的变量


结构体指针作为函数的参数

#include <stdio.h>

struct Car {

   int lunzi;

   int speed;

};

void xiuche(structCar *p){

   p->lunzi=2;

int main(int argc,const char * argv[]) {

   struct Car car1={4,100};

   xiuche(&car1);

   printf("%d",car1.lunzi);

   return 0;

}




枚举类型

枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型

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


     enum  枚举类型名(枚举值表)

  enum color{yellow,rad,blue};


枚举类型变量的定义

1)定义枚举类型的同时定义变量

enum color{yellow,rad,blue}colors;

2)先定义枚举类型后定义变量

enum color icolor;


举类型变量的初始化

   enum color{yellow,rad,blue}colors;

   enum color icolor;

   colors=yellow;

   icolor=blue;


3)枚举变量的使用

printf("%d",colors);

4)枚举类型定义完成后,系统会自动给枚举的每个元素赋一个整型的初始值,从0开始,依次+1


typedef使用方法

1)基础数据类型


typedef int ZHENGXING;


2)用在数组


typedef int ARR[5];

ARR a={1,2,3,4,5};


3)给结构体起别名


   struct person{

   char *name;

   int age;

   };

   struct person p1={"wy",24};

   typedef struct person P;

   P P2={"yw",24};


4)给枚举类型起别名


typedef enum sex{sexMan,sexWoman} ISEX;


5)给函数指针


int (*p)(int,int );

typedef  int (*FUN)(int,int );


预处理指令

以#号开头的预处理命令。如包含命令#include,宏定义命令#define等,在源程序中这些命令都放在函数之外,而且一般都放在源文件的前面,他们称为预处理命令。


宏的概念及无参宏定义方法


被定义为宏的标示符称为宏名,源程序在编译之前,由预处理程序对我们写的源代码进行处理,会把源程序中所有出现宏名的地方一律使用宏的字符串替换。


宏分为有参数和无参数两种


无参宏的宏名后不带参数,其定义的一般形式为

 #define 标示符 字符串

 #define M 5


宏使用的注意事项

1)宏是有作用域的

2)在字符串中出现的宏名不会被替换

3)宏可以嵌套使用 

#define R 5

#define PI 3.14

#define AREA PI*R*R

 

4)使用宏起别名

#define  INT1 int

int main(int argc, const char * argv[]) {

   INT1 a1;

   a1=10;

   printf("%d\n",a1);

   return 0;}


有参宏的定义方法

对带参宏,在调用中,不仅要宏展开,而且要用实参去代替形参

带参宏的定义的一般形式为:

#define 宏名(形参表) 字符串

#define A(a) a+a


有参宏使用注意:

1)宏的形参之间可以出现空格,但是宏名和形参之间不能出现空格

#define A(a   ,b) a+b

#define A (a   ,b) a+b//错误的


2)有参宏宏的参数最好用括号括起来

#define A(x,y) (x)*(y)+(x)+(y)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值