第二周工作学习总结

第二周工作学习总结
[toc]

本周任务:

  • 人民币小写转大写,精确到角、分;

  • 具有100以内两位数加、减、乘、除及分数运算的随机出题计算器,可以判断正误;

  • 阅读《指针与内存》

完成情况:

  • [人民币大小写转换]——未完成;
  • [计算器]——完成了加减乘和分数运算,除法运算四舍五入位数保留有瑕疵;
  • 阅读任务——未完成?

学习总结

基础知识

  1. 数字用宏,不然替换掉的时候不方便;
  2. 内存分配(对堆的分配);
  3. 数组不等于指针;
  4. 用指针存储字符串,实质在于把静态区的首地址赋值给指针变量;
  5. 数据结构内部对齐;
  6. 指定字节对齐;
  7. 字节序之大头序&小头序;
  8. 字符串拷贝与内存拷贝(strcpy()函数与memcpy()函数);
  9. 溢出与翻转;
  10. 常用函数:数字字符和数值之间的转换;
  11. 当代码中多处需要使用同一个数字时,将其用宏定义替换,宏定义为有意义的名称,以便修改;
  12. 对堆内存的分配和释放都需要手动进行,malloc()和free()配对使用,不然容易发生内存泄漏;其次,需要对堆进行初始化操作,不然可能会发生指针的越界操作,如同strlen()、strcpy()等函数一样,找到\0(同数字0)才会截止对字符串的操作,因此一般会将以下三个函数作为一套使用:

    char* r = (char* ) malloc (MAX_SIZE);//开辟新的堆内存
    if(!r){
    printf(“内存不足,分配失败!”);
    return -1;
    }

    memset(r,0,MAX_SIZE);//初始化字符串

    /对堆内存的使用/
    free(r);//对废弃的内存进行回收

回收实质是将该指针变为废指针(bad pointer),即指向失效。

strlen()和sizeof()的不同

strlen()对字符串头部开始计数,遇到0即停止,而sizeof()函数总是针对类型大小的计算;

指针的大小(32位机)位四个字节;

关于数据结构内部对齐,举例如下:(char占1个字节,int占4个字节,float占4个字节,double占8个字节)

四字节对齐时——

struct x{
char a;
int b;
double c;
};

此时,x类型的sizeof(x)=4+4+8=16 Bytes,总共取三次;

而当一字节对齐时,sizeof(x)=1+4+8=13 Bytes

需要字节对齐的根本原因在于CPU访问数据的效率问题。我们可以按照自己设定的对齐大小来编译程序:

#pragma pack (push)
#pragma pack(1)
#pragma pack(pop)

指定1字节对齐;(网络上发送数据以1字节对齐);

关于大头序和小头序:

字节序,指多个字节的排列顺序,大头序是高位在低字节,低位在高字节的排序方式。两种方式没所谓好坏,但是若涉及通信,则双方需要有统一的通信规范;在网络中传输的都是大端序

大头:多字节值的大头存储在该值的起始位置;(老大站排头为大)

小头:多字节值的小头存储在该值的起始位置;(老小站排头为小)

例如16bit整数:0x0102,其中01即为多字节值的大头,02即为多字节值的小头。

关于局部变量

函数退出后栈自动释放,所以函数内部的引用变量不可用,比如对某一个变量的引用;

关于数组

数组不等同于指针:数组名不是指针,数组名和指针有很大区别,在使用时要进行正确区分。

1.数组名指代一种数据结构,这种数据结构就是数组;

2.数组名可以转换为指向其指代实体的指针;

3.指向数组的指针则是另外一种变量类型(在WIN32平台下,长度为4),仅仅意味着数组的存放地址;

字符串拷贝与内存拷贝:

字符串拷贝使用strcopy()函数,遇0停止,因此当对一片内存区域进行拷贝时,不能用strcopy(),应当用memcpy()。

关于逻辑判断:

不在判断分支处进行运算,防止出错;

使用if(0 == bl)代替if(bl == 0),以防手误成为赋值操作,逻辑恒“是”。

溢出与翻转:

有符号数超过范围继续增加或减少称为溢出,无符号数在超过范围的区域操作称为翻转;

数字字符与数字的转换:

  • 数字字符 - ‘0’ 转换为对应的数字;
  • 数字 + ‘0’ 转换为对应的数字字符;
  • 调用函数先看返回值;
  • 强制转换会发生截断,真实值与截断值存在截断误差。

关于switch() case: 函数:

  • 必须要有default,防止出现不可预料的错误;
  • 每个case后都要有break;
  • switch()括号中的值为表达式,其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。

小结

  1. 不能将char类型的值赋值给字符串,因为字符串为静态区,不可修改;
  2. 动态申请内存后记得初始化和释放;
  3. 字节对齐可以提高CPU效率,网络上发送数据以1字节对齐;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值