结构体和预定义
来源:互联网 发布:编程常用语言有哪些 编辑:程序博客网 时间: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 */**
- 结构体和预定义
- 编译器之WIN64预定义宏和数据对齐设置对结构体大小的影响
- makefile的基本结构和预定义变量
- 预定义 Constant和 Vars
- 预定义常量和类型
- [MFC]文档/视图结构的命令传送和预定义命令ID(包括命令处理程序)
- [李景山php] 深入理解PHP内核[读书笔记]--第三章:变量及数据类型--变量的结构和类型--预定义变量
- C# 预定义和自定义属性
- Azure:自定义环境变量和预定义环境变量
- 预定义宏__GNUC__和_MSC_VER
- PHP-常量和预定义常量
- 编译器预定义宏__GNUC__和_MSC_VER
- 数据结构1.预定义类型和变量
- linux:预定义变量和read命令
- 类 - 函数的预定义和调用
- 4.预定义变量和位置变量
- 常用的预定义和预编译
- 微擎全局变量和预定义常量
- 关于windows 10 安装
- ping故障检测过程
- Ubuntu16.04 Server 64bit 使用LVM
- Anti-Goldbach's Conjecture 素数打表
- 剑指offer——序列化二叉树
- 结构体和预定义
- hdu 1286 素数打表
- Android 手势滑动
- 最长公共子序列(未完成)
- matlab对excel数据进行排序求和
- 关于自定义对话框(二)
- C语言基础 编译成功的exe运行时闪退
- hdu 2136 素数打表
- 第十五周(3)-阅读程序