学习日志 姓名:叶圣民 日期:2018.07.23.
|
|
今日学习任务
|
1、熟练掌握所有关键字的使用;(static、extern、typedef) 2、熟练掌握复合数据类型的使用;(struct、union、enum) 3、编程技巧总结; |
今日任务完成情况
(详细说明本日任务是否按计划完成,开发的代码量) |
关键字:
register注意事项:只能修饰局部变量,不能修饰全局变量和函数; 不能对被修饰的变量取地址;因为改变量保存在CPU内部寄存器中无法在内存中读取地址
可用于修改局部变量的生命周期(使用范围)(延长至整个函数执行完毕) 减少使用全局变量:①全局变量代码危险 ②全局变量被共享后会数据紊乱 static修饰的全局变量(或函数)只能在本文件中使用不能在其他文件中使用
声明该变量(函数)是在其他文件中定义,若使用需要到其他文件中寻找定义
注意事项:①修饰变量要初始化; ②离得近的被修饰;不能改变 ③在定义函数的时候使用,防止该函数修改了原始数据
复合数据类型:数组 结构体 共用体(联合体) 枚举
{ int num; char ch; }msg; typedef struct message Messgae; Message * p_msg = &msg;//*p_msg = msg P_msg->num = 5;
内存空洞:由于对齐方式导致的(32位系统下的最大对齐字节是4个字节);可以设置编译器的最大对齐方式
作用:封装数据(打包数据)
为避免 幻数 ,把无法字自注释的数字宏替换 当 幻数 有很多,都需要宏替换的时候用 枚举; 宏函数:例 #define MAX(a,b) a > b ? a : b 简短且频繁被调用的函数可用宏替换;
|
今日开发中出现的问题汇总
|
2、continue VS break |
今日未解决问题
|
无 |
函数指针数组使用的练习(简单计算器)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
double add(double a,double b)
{
return a + b;
}
double sub(double a,double b)
{
return a - b;
}
double mul(double a,double b)
{
return a * b;
}
double div(double a,double b)
{
return a / b;
}
double cal(double a,double b,double (*p_cal)(double,double))
{
return p_cal(a,b);
}
int main()
{
int i = 0;
double (*p_cal_array[4])(double,double);
p_cal_array[0] = add;
p_cal_array[1] = sub;
p_cal_array[2] = mul;
p_cal_array[3] = div;
printf("*p_cal_array\n");
for(i = 0;i < 4;i++)
{
printf("result[%d] = %0.2lf\n",i,(*p_cal_array[i])(2,3));
}
printf("*p_cal\n");
printf("add = %0.2lf\n",cal(2,3,add));
printf("sub = %0.2lf\n",cal(2,3,sub));
printf("mul = %0.2lf\n",cal(2,3,mul));
printf("div = %0.2lf\n",cal(2,3,div));
return 0;
}
struct学习
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct message
{
int num;
char ch;
char ptr[100];
};
typedef struct message Message;
int main()
{
Message msg;
Message * p_msg = &msg;
msg.num = 2;
(*p_msg).num = 1;
msg.ch = 'c';
//msg.ptr = "hello world";//错误
//msg.ptr = (char *)malloc(sizeof(char) * 100);
strcpy(p_msg->ptr,"hello world");
printf("msg.num = %d\n",msg.num);
printf("msg.ch = %c\n",msg.ch);
printf("msg.ptr = %s\n",msg.ptr);
return 0;
}
用共用体判断CPU 是 大端字节序 还是 小端字节序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
union node
{
//int num;
char ch1;
char ch2;
int num;
};
typedef union node Node;
int main()
{
Node p;
p.num = 0x12345678;
if(p.ch1 == 0x78)
{
printf("小端字节序\n");
}
if(p.ch1 == 0x12)
{
printf("大端字节序\n");
}
printf("sizeof(p) = %d\n",sizeof(p));
return 0;
}
1024