周记

本周任务:
一.这周内学完到结构体和共用体
二.这周内做四道题在leetcode上
1.存在重复元素
2.最长回文子串
3.数组中的第K个最大元素
4.单词搜索 II
三.
C语言教材: P29(例2.13);
P61(例4.6);
P78(例5.3和例5.4);
P89(例5.19);
P105(例7.2);
第七章章末习题

未完任务:
1,单词搜索II
2,第七章末习题7.6:
将两个按升序排列的数列,仍按升序合并存放到另一个数组中,要求每个数都一次到 位,不得在新数组中重新排序。

遇见问题:一,exit()函数:
1.原型:void exit(程序状态值)
2.功能:结束程序运行,返回操作系统,并将“程序状态值”返回给操作系统。 当程序状态值为0时,表示程序正常退出;为非0时,表示程序出错 退出。
二,scanf 输入字符前加空格问题
空格确实不是必须的,但有了空格就可以忽略你输入的空格!
例如:scanf(" %c" ,&c);
你输入了’ a’(a前面有个空格),a就能被c接受。但控制符前如果没空格,那c就接受了空格,这个可以防止误操作,忽略空格输入,接受第一个非空格输入。
三,结构体内存对齐问题:
元素是按照定义顺序一个一个放到内存中去的,但并不是紧密排列的。从结构 体存储的首地址开始,每个元素放置到内存中时,它都会认为内存是按照自己的大 小来划分的,因此元素放置的位置一定会在自己宽度的整数倍上开始。

例如:struct A { int a; char b; double c; char d; };
解析:
int a从0偏移开始,占四个字节,即占用0,1,2,3,现在可用偏移为4偏移,接下来存char b; 由于4是1的倍数,故而,b占用4偏移,接下来可用偏移为5偏移,接下来该存double c; 由于5不是8的倍数,所以向后偏移5,6,7,都不是8的倍数,偏移到8时,8是8的倍数,故而c从8处开始存储,占用8,9,10,11,12,13,14,15偏移,现在可用偏移为16偏移,最后该存char d ;因为16是1的倍数,故d占用16偏移,接下来在整体向后偏移一位,现处于17偏移,min(默认对齐参数,类型最大字节数)=8;因为17不是8的倍数,所以继续向后偏移18…23都不是8的倍数,到24偏移处时,24为8的整数倍,故而,该结构体大小为24个字节。

方法总结:
a、从零偏移处开始,按字节大小计算,判断此偏移地址是否为该成员变量和对齐参数两者之间的最小值,即min(对齐参数,sizeof()成员);
b、若是,则从此处开始占用内存,大小为该类型所占字节数值,若不是,则内存向后偏移到最小值整数倍处,再开始占用空间。
c、按a、b、两步骤算出结构体实际所占内存时,为了方便后面类型的存储,再向后偏移一位,然后判断该地址是否是默认对齐数与该结构体中最大类型所占字节数的最小值 ,即:min(默认对齐参数,类型最大字节数)的整数倍,若是,则当前偏移地址的字节数便是结构体大小,若不是,继续向后偏移,直至为最小值整数倍为止。
四,7.6习题思路:
1,将一个数组中的数插入另一个数组中;
2,将两个数组数的大小进行比较,小的放自定义的数组中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值