结构体和预定义

来源:互联网 发布:编程常用语言有哪些 编辑:程序博客网 时间:2024/05/14 16:30

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 */**
0 0
原创粉丝点击