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

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

2015-07-29 22:34 246 查看

结构数组概念

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

结构体数组定义:

    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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: