嵌入式开发学习日志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被称为野指针;

野指针:指针指向的位置是不可知的;

指针运算三大步:

  1. 根据指针变量的值去内存中定位
  2. 从定位处开始向后偏移sizeof(基类型)个字节
  3. 将偏移后的那部分内存空间当作一个基类型变量来看

练习:

(1)计算三个数的和;

程序:

 (2)找出三个数中的最大值和最小值;

 程序:

 (3)交换连个变量的值;

程序:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值