1、类型重定义:typedef 为一个复杂的类型起一个别名;
例: typedef unsigned long size_t; //size_t就是ensign long类型
引用:C++ 中给变量起一个别名
int a = 10;
int &aa = a;
2、结构体的定义:
struct:是一种数据结构,用于表示有关联的元素的集合;
struct people
{
char *name;
int age;
char *sex;
}; //分号不可少
数组:相同类型的集合
3、定义方式:
1)只定义结构体
struct people
{
char *name;
int age;
char *sex;
};
struct people peop = {“lily”,22,”girl”};
struct people peop = {“lily”,22};//可以缺省赋值,sex默认为NULL
struct people peop = {“lily”,”girl”}; //error 不能跳跃缺省赋值
//访问/修改:
peop.name = "jhon";
printf("姓名为:%s\n",peop.name);
2)定义结构体的同时声明结构体变量
struct people
{
char *name;
int age;
char *sex;
}peop;
//赋值访问方式:定义后不能直接初始化,与数组相同
sample .name = "lily1";
sample.age = 22;
sample.sex = "girl";
printf("姓名为:%s\n",sample.name);
3)类型重定义
typedef struct people
{
char *name;
int age;
char *sex;
}sample; //sample是struct people的别名
//定义访问方式
sample peop = {"lily",22,"girl"}; 等价于 struct people peop = {“lily”,22,”girl”};
peop.name = "jhon";
printf("姓名为:%s\n",peop.name);
4、结构体占用空间大小:
结构体有所占空间自动补齐功能:不同类型向内存占用最大的看齐,相邻的两个元素可以结合补齐,但是不能隔着元素
例:
int a;
char b; //占8字节,char 类型补3个字节
char a;
char b; //占2字节
double a;
int b;
char c; //占16字节,最长下方累加补齐
int a;
double b;
char c; //占24字节,最长上下各自补齐(不允许跨过
//最长占用内存变量累加)
struct people
{
double id;
int age;
};
struct num
{
struct people p;
char sex;
}; //占24字节,不同结构体之间不会累加补齐
5、结构体指针访问成员方式:(*变量名).成员名 / 变量名->成员名
struct people
{
double id;
int age;
};
struct people peop = {001,22};
struct people *pt = &peop;
printf("&ld",pt->id); //指针访问
printf("%d",(*pt).age); //指针解引用之后进行访问
预处理
1、种类:
1)头文件包含
2)宏替换
3)条件包含
2、头文件包含:在一个文件中包涵另一个头文件(.h)的内容,在编译处理时将另一个头文件的内容复制到#include命令所在到位置
使用尖括号#include
带参宏替换:#define 宏名(参数列表) 字符串
例: #define max(a,b) ( (a) > (b) ? (a) : (b) )
注意:带参宏替换要注意参数的变换,防止副作用,例如:(*p++)>(a)?(*p++):(b)这个式子指针p会自增两次
4、条件包含:#if #elif #else #endif / #ifdef #endif / #ifndef #endif
防止预定义重复
*#ifndef Person_hpp
*#define Person_hpp*
*#include <stdio.h>*
*#endif /* Person_hpp */**