苏嵌嵌入式Linux实训 第5天
嵌入式学习第五次课程,主讲C语言的复习,以及一些相关代码的演示,只有自己动手操作,才能发现其中的妙处。
一、课程内容
位运算、基本控制语句、华为编码规范和范例、指针、数组。
位运算
&|^>><<~
基本控制语句
预处理(宏、条件编译)
时间:编译时间、运行时间
空间:内存空间
时间换空间
空间换时间
华为编码规范和范例
指针、数组(内存管理)
- 指针
1、指针是什么?
指针是一个变量(指针变量),保存的是地址,作用:能够直接操作地址
2、指针类型是根据储存的地址的类型(类型+步长)
3、*&运算符:*取值运算符 &取地址
4、多为指针的作用“保存前一维指针变量的地址
5、指针赋予<一定是相同指针类型赋值>及运算
6、万能指针:void*:可以接收任何类型指针的值!(不能做取值和运算)
7、野指针
- 数组
1、数组的定义及初始化
2、数组名的作用
3、数组指针
*(&a)=a;
对一维数组的地址取值等于一维数组首元素的地址
数组指针pa:
int (*pa)[MAX_SIZE]=&a;
一维数组的单位是元素,二维数组的单位是一维数组,三维数组的单位是二维数组
二维数组名:指针常量,保存首个一维数组地址
三维数组名:指针常量,保存首个二维数组地址
*aaa = 首个二位数组的首个一维数组的地址
**aaa = 首个二位数组的首个一维数组的首元素的地址
4、指针数组
5、main参数:命令行参数
二、问题解答
- 掩码
掩码是一串二进制代码对目标字段进行位与运算,屏蔽当前的输入位。
用途:将源码与掩码经过按位运算或逻辑运算得出新的操作数。其中要用到按位运算如OR运算和AND运算。用于如将ASCII码中大写字母改作小写字母。
如A的ASCII码值为65= (01000001)2,a的ASCII码值为97=(01100001)2,要想把大写字母A转化为小写字母只需要将A的ASCII码与(00100000)2进行或运算就可以得到小写字母a。
- &、|、^
按位与运算符“&”是双目运算符。其功能是参与运算的两个数字对应的二进制位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。
按位或运算符“|”是双目运算符。其功能是参与运算的两个数字对应的二进制位相或。只要对应的两个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。
按位异或运算符“^”是双目运算符,其功能是参与运算的两个数字对应的二进制位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现。
- //代码的可读性
自注释性
- //函数调用过程
通过函数名找到函数的人口位置
给形参分配空间
传参
执行函数体的语句
返回
释放空间
- //预处理
傻瓜式替换 特点:省去函数调用的时间,省去给形参分配的空间和释放
- //什么样的函数要写成宏函数?
频繁调用且功能短小简单的函数
- 常用宏函数
- 其他预处理指令
#error指令将使编译器显示一条错误信息,然后停止编译。
#line指令改变_LINE_与_FILE_的内容,它们是在编译程序中预先定义的标识符。
#pragma指令没有正式的定义。编译器可以自定义其用途。典型的用法是禁止或允许某些烦人的警告信息。
复制代码
//例10,#line举例
#line 100 //初始化行计数器
#include<stdio.h> //行号100
int main()
{
printf("Hello World!\n");
printf("%d",__LINE__);
return 0;
}
三、作业解答
#include <stdio.h>
#include "stdio.h"
void print1(char *ptr)
{
printf("%s\n", ptr);
}
void print2(char (*ktr)[100])
{
for(int i = 0; i < 2; i++)
{
printf("%s\n", *(ktr + i));
}
}
void print3(char (*str)[2][100])
{
for(int i = 0; i < 2; i++)
for(int j = 0; j < 2; j++)
{
printf("%s\n", str[i][j]);
}
}
void print4(char **ytr)
{
for(int i = 0; i < 3; i++)
{
printf("%s\n", *(ytr + i));
}
}
int main()
{
char ptr[100] = "hello";
char ktr[2][100] = {"hello1", "hello2"};
char str[2][2][100] = {{"hello3", "hello4"}, {"hello5", "hello6"}};
char *ytr[3] = {"hello7", "hello8", "hello9"};
print1(ptr);
print2(ktr);
print3(str);
print4(ytr);
}
- 苏嵌工程实训-嵌入式Linux开发(基础命令)
- 苏嵌实训-嵌入式 linux C 第 5 天
- 苏嵌实训-嵌入式 linux C 第2天
- 苏嵌实训-嵌入式 linux C 【第5 天】
- 苏嵌实训-嵌入式 linux C 第 5 天
- 苏嵌嵌入式linux实训 第 6 天
- 苏嵌嵌入式linux实训第四天
- 苏嵌嵌入式linux实训 第 3 天
- C语言基础知识-苏嵌实训 嵌入式 linux C 第 3 天
- 苏嵌实训-嵌入式 linux C 第 4 天
- 苏嵌实训-嵌入式 linux C 第1 天
- 苏嵌实训-嵌入式linux C 第 4 天
- 苏嵌嵌入式linux实训 第 5 天
- 苏嵌嵌入式linux实训第三天
- 苏嵌嵌入式linux实训 第 2 天
- 苏嵌嵌入式linux实训 第2天
- 苏嵌实训-嵌入式 linux C 第 3 天
- 苏嵌实训-嵌入式 linux C 第1 天
- 苏嵌实训-嵌入式Linux C 第 3天
- 苏嵌嵌入式linux实训 第 4 天