嵌入式开发学习日志Day13
第九章 预处理命令
前面加“#”的都为预处理命令;
预处理命令是无脑的文本替换;
一、宏定义
1、不带参数的宏定义
一般形式为:
#define 标识符 字符串
(谷歌规定):所有的宏名均大写,便于区分;
写宏时,左右两边加括号,防止出错;
宏可以嵌套使用;
【gcc - E】————只做预处理,不编译;
【-omain.i】————输出main.i文件,预处理的结果;
2、带参数的宏定义(带参宏)
一般定义形式:
#define 宏名 (参数表)字符串
eg:define ADD(a,b) (a)+(b)
调用:printf("%d\n",ADD(3,4));
注意:带参宏的参数不用加数据类型;
eg:用带参宏计算三角形的面积;
程序:
二、“文件包含”处理
include命令的使用;
eg:#include <stdio.h>
文件名可以写在< >或者“ ”中进行表示;
文件名内容可以由绝对路径和相对路径构成;
< >和“ ”在用绝对路径时用法相同;
在表示相对路径时:< >会在//usr/include/下去寻找;
“ ”会在当前的main.c下去寻找;
三、条件编译
1.若表达式为真,可运行;为假,注释(非零即为真)
#if (表达式)
#endif
2.用于调试
#ifdef 标识符
//指一个宏,若被定义执行程序段1,不执行程序段2;未被定义,则相反程序段1
#else程序段2
#endif
3.用于解决对同一头文件可能多次包含,导致被重新定义引发编译错误
#ifndef程序段1
#else程序段2
#endif
在使用时,每个头文件都参照下面格式去书写
#ifndef FUNC_H
#define FUNC_H
内容
...
...
...#endif
第十章 指针
一、地址和指针的概念
指针是用来装地址的数据类型;
定义指针变量的一般形式:
基类型 *指针变量名 eg:int *p;
基类型————表示指针中装什么类型的地址;
int i = 10;
int *p;
p = &i;
或者可以
int i = 10;
int *p = &i;
成为指针变量P的指向变量;
注意:
*p 就是 i 本身,————指针的间接访问;
int *p中————*时类型说明符;
*p 的数据类型就是基类型;
在64位系统下,所有的地址都占8个字节;
在32位系统下,所有的地址都占4个字节;
当&和*放在一起时,可以被抵消,但是必须注意*后必须为指针参数;
指针运算要求其操作数必须是指针;
void swep (int *a,int *b);
int *t;
*t = *a;
其中*t被称为野指针;
野指针:指针指向的位置是不可知的;
指针运算三大步:
- 根据指针变量的值去内存中定位
- 从定位处开始向后偏移sizeof(基类型)个字节
- 将偏移后的那部分内存空间当作一个基类型变量来看
练习:
(1)计算三个数的和;
程序:
(2)找出三个数中的最大值和最小值;
程序:
(3)交换连个变量的值;
程序: