回家后的小米便签

来源:互联网 发布:知乎台湾男生 编辑:程序博客网 时间:2024/04/30 15:33

难道我是一个爱学习的人?我活了这二十多年的习惯是,从来不会在家学习。上学上了这么多年,逢年过节,有过无数个假期,每次回家前都是信誓旦旦的说要回家好好看书、学习,结果我的书包在家从来没有打开过,我的书怎么拿回家就怎么拿回学校,这次或许是一个不是意外的意外,因为我看书的地方的确不是在家。

我是想到一个问题我就用我的小米便签记录下来,然后想明白了就记下我思想的过程,想不明白就把问题记下来,回头找那几个大牛们请教请教。。。。

废话太多,下边是我的记录:

1、c primer中说到free只能释放由malloc分配的空间,但是我在vc上测试过释放一个数组名或者是指向该数组的指针,编译是可以通过的,但是再对该数组进行访问,就会执行失败,而free一个malloc申请的空间后,再对该空间进行访问,是不会报错的,而是返回一个随机值,这个指针成了一个野指针。两者的结果不一样,是不是因为两个空间的位置不一样,一个在栈,一个在堆?

在free前、后指针所指向的地址和指针的地址都不变,也就是说p和&p的值都是原来的值,而free后的指针所指向地址的内容却不是原来的内容了。。。。

2、volatile修饰一个变量,该变量可能被程序改变还能被其他代理改变,一个变量能被const修饰还能被volatile修饰,比如:硬件时钟一般设置为不能由程序改变,这一点使得他成为const,但是他可以被程序之外的代理改变,使他成为了volatile!(来自c primer)也就是说一个表示时钟的变量不能在程序中修改但是可以被外部硬件电路修改。。。

我对上边这段话理解了一般,主要是没有亲手使用过必须要用到volatile还有就是我对计算机专业才学习的编译原理不太懂。

一下这段话来自“c语言深度剖析”--:

int i=10;//--1--int j=i;//--2--int k=i;//--3--

这三句代码中,三个变量都没有被volatile修饰,i没有作用于左值,这是编译器认为i的值没有发生改变,所以在2语句时,从内存中取出i的值赋给j之后,这个值还没有丢掉,而是在3语句时继续用这个值赋给k,编译器不会生出汇编代码重新从内存中读取i的值,这样提高了执行效率,但是要注意的是2,3中间确认没有改变i的值才行。(这是编译器的优化,使程序执行时效率变高)

volatile int i=10;int j=i;int k=i;


这三句话执行时,给j、k赋值时都要从内存中读取i的值,因为在定义i的时候,就告诉编译器i是一个可能随时改变的值,也就是说两次使用i的值时,有可能两次i的值不一样,但是这时候如果编译器还是要优化成第二次的赋值不从内存中读取,这样取到的值就不是当前i的值了。所以这样的变量是不能被优化的。

这样的话似乎在多线程的时候更有可能会随时改变一个变量的值,这时候会不会就要考虑到用volatile呢?以前用多线程的时候都没有考虑那么多。。。以后需要注意!!!

3、位操作:如果1左移100位,该用什么变量存放表示呢?似乎没法赋给变量,只有在使用时写(1<<100)。。。。

4、用malloc申请一段空间,并用指针p指向该空间,返回给p的值是空间的首地址?如果只是首地址,那么p怎么知道自己指向了多大一段空间呢?或许返回的时候也有一个隐含的结构体,存放了该段空间的各种属性。。。。

5、举出几个socket模型,并实现一个非阻塞socket。这句话是在一个公司的笔试题里看到的,一看见这个实现非阻塞我就想起来上次去面试一家公司,他让我徒手写出客户端、服务器的程序,并且实现非阻塞。我的天啊,我知道我的实力,只有看着书本才能完成,因为我对结构体名还有函数的参数都忘的差不多了,这不是在为难我么?还好我印象中知道有一个select可以实现非阻塞,但是人家题上都说了使用select实现,这让我情何以堪。。。。

6、在一个函数参数中的形式如果是一个数组,这个数组就会被退化成一个指针,而这个形参中a[n],n可有可无,也就是说跟n是没有关系的。所以在函数中用sizeof测试形参数组的大小,32位系统中肯定是4。。。。

7、写一个循环链表实现的循环查数剔除问题???我也忘了我当时怎么会记这样一句话,可能是从某一个笔试题上看到的吧,有空了查查。。。。

8、register修饰的变量不一定放在内存中,所以用&取这样的变量的地址是没有意义的,,,但是真是对变量取地址会怎么呢?在你vc上测试结果是直接编译错误,连编译读过不了。。。。

9、再熟悉一下补码、反码、原码在I有符号类型和无符号类型中的存储形式。。。。

10、浮点数的存储形式和比较方法,两个浮点型数据有不同的小数点位数,怎么比较,一个浮点数数据是否会自动遵循四舍五入?对浮点数的研究这只是个开始。。。。

11、C语言中30个关键字:int。。。。