项目名称 |
【苏嵌实训-嵌入式 linux C 第 4 天】 |
今日进度以及任务 | 讲解了位运算,编码预处理,编码规范,指针数组 |
本日任务完成情况 (详细说明本日任务是否按计划完成,开发的代码量) | 将老师上课所讲的代码全部自己敲了一遍 按时完成了老师布置的问题 |
本日开发中出现的问题汇总 | 对于数组的地址问题没掌握牢固,讲解过后才彻底了解清楚 |
本日未解决问题 | 关于野指针的相关问题还不是很明白 |
本日开发收获 | 1、位运算一定操作无符号数 2、编译预处理最重要的是宏(避免幻数)和条件编译,知道宏函数的优缺点 3、以华为编码规范学习了如何将代码格式写好 4、充分回顾了指针和数组 |
其他 |
|
#include<stdio.h>
void print1(char *ptr)
{
printf("ptr = %s\n",ptr);
}
void print2(char (*ktr)[100])
{
for(int i = 0;i < 2;i++)
{
printf("ktr[%d] = %s\n",i,*(ktr + i));
}
}
void print3(char (*str)[2][100])
{
for(int i = 0;i < 2;i++)
{
for(int j = 0;j < 2;j++)
{
printf("str[%d][%d] = %s\n",i,j,*(*(str + i) +j));
}
}
}
int main()
{
char ptr[100] = "hello";
char ktr[2][100] = {"hello1","hello2"};
char str[2][2][100] = {{"hello3","hello4"},{"hello5","hello6"}};
print1(ptr);
print2(ktr);
print3(str);
return 0;
}
四、运算符,基本控制语句
位运算(一定操作无符号数unsigned)&,|,^,>>,<<,~
掩码 按位与,按位或,按位异或
五、编译预处理
最重要的是宏(避免幻数)和条件编译
宏 避免幻数,加强代码的可读性(自注释性),提高代码的维护性
宏函数 傻瓜式替换,不安全,容易出错,省去函数调用返回的时间,同样省去了给形参分配空间和释放
宏函数和自定义函数的区别 宏函数用编译时间换内存空间和运行时间
什么样的函数要写成宏函数 频繁调用且功能短小的简单函数
六、编码规范(华为编码规范)
排版 四字空格缩进,相对独立程序块后加空行,一行只写一条语句,对其只使用空格不用tab,{}使用
注释 写每个函数时都要写注释(函数名称功能等)
标识符命名 标识符命名要清晰明了有明确含义
七、指针、数组(内存管理)
指针
指针是什么?指针是一个变量(指针变量),保存的是地址,作用:能够直接操作地址(直接访问硬件)
指针类型是根据存储的地址的类型(类型+步长)
*&运算符 *取值运算符 &取地址
多维指针的作用 保存前一维指针变量的地址
指针赋值(一定是相同指针类型赋值)及运算
万能指针 void* 可以接受任何类型指针的值(不能做取值和运算)
野指针
数组
数组的定义及初始化
数组名的作用 一维数组、二维数组、三维数组
一维数组名:指针常量,保存数组首元素的地址
数组地址:对数组名取地址获得整个数组地址
*(&a)= a 对一维数组的地址取地址等于一维数组首元素的地址
二维数组名:指针常量,保存的是首个一维数组地址
一维数组单位是元素,二维数组单位是一维数组,三维数组的单位是二维数组