姓名:周海阳 日期:2018年6月21日
今日学习任务:C语言的基础训练
数组:
未初始化的全局变量为0;
未初始化的局部变量为垃圾值;
如果对数组的一部分初始化了,其余的未赋值的为0;
GCC编译经过四个步骤(百度详细)
1.预处理:处理以#开头的东西 如头文件,宏定义,条件编译#if...
2.编译:.c --> .i 中间经过最重要的一步!!检查语法错误!!
3.汇编:转换成汇编文件
4.链接:在复杂的工程里,将所有的文件合在一起;链接我们所需要的库
int i=1;
地址 0x100 0x101 0x102 0x103
低地址 高地址
字节 00000000 00000000 00000000 00000001
高字节 低字节
字节序:每个设备不同分大端小端
大端:低字节存在高地址
小端:低字节存在低地址
如何判断大小端:
#include <stdio.h>
union test
{
short val;
char t[2];
};
int main()
{
union test te;
te.val = 0x0102;
if(te.t[0] == 1 )
{
printf("大端\n");
}
else
{
printf("小端\n");
}
while (1);
return 0;
}
一维数组:
a 数组名 也是数组首个元素的地址 a+1表示的是加一个数组元素
&a 数组的地址 &a+1 表示加一个数组
二维数组:
a 数组名,也是数组首行的地址 a+1 加一行
&a 数组的地址 &a+1 加一个数组
a[0][0] 数组首行首元素的地址 a[0][0]+1 加一个元素
a[0] 数组首行首元素的地址 a[0]+1 加一个元素
*a 数组首行首元素的地址 *a+1 加一个元素
* [] 两个符号是等价的!
a[0] == *a a[1] == *(a+1)
int i;
int a[5] = {0};
for(i = 0 ; i < sizeof(a) / sizeof(a[0]) ; i++ )
{
printf("%d ",a[i]);
}
printf("\n");
printf("%p\n",&a[0]);
printf("%p\n",a);
printf("%p\n",&a);
printf("%p\n",&a[0]+1);
printf("%p\n",a+1);
printf("%p\n",&a+1);
——————————————————————————————————————————————————————————————
int 实参
函数(形参)
函数调用的六个步骤:
1.通过函数名找到函数入口地址
2.给函数的形参分配空间
3.传值(值传递,地址传递)
4.执行函数体
5.返回
6.释放空间!!!
*str = (char *)malloc(sizeof(char) * 100); //malloc向系统申请分配char字节的内存空间 堆
static:修饰全局变量 改变变量的作用域 只能在本文件被使用
修饰函数,也是改变函数的作用域 只能在本文件被使用
修饰局部变量,改变变量的生命周期(本来局部变量在函数运行完的时候就结束了,加上staic直到程序退出才结束)
#define PRINT printf("hello") //宏函数
#define P(s) printf("%s\n",s) //有参的宏函数
#define SQR(x) x*x
int main()
{
int a = 1 ,b = 2;
printf("%d\n",SQR(a + b)); //input 5 1+2*1+2
while(1);
}
typedef unsigned char uchar
#define uchar unsigned char
今日任务完成情况:按照作业要求,完成约200行代码。
今日开发中出现的问题汇总:不懂问百度,实在不行就谷歌。
今日未解决问题:无。
今日开发收获:复习了C语言的知识,对自己的动手能力有所提升。实现一种功能可以有许多方法,要扩展思维
自我评价:一般,不太满意。
其他:无