暑假C语言学习总结之二

     我最近仍然以学习C语言为主,学习的内容主要包括数组、指针、结构体和共用体,这些内容虽然以前都学过,不过对于当时仅仅算是入门,或者更差,通过这一周的学习后对这几部分的综合应用有了较深的体会,特别是刚开始对兔子生崽问题反复研究了好几遍才对数组的运用较为理解,以及在查找和排序时一维和二维数组的地址传递。在学习指针的时候,刚开始还对C语言为什么要使用指针感到困惑,一节一节学下来后才知道指针的重要性,而数组和指针联合应用时其灵活性却始终不太好把握。学习结构体和共用体时,终于对链表这个一直畏惧的数据结构有了更多的理解,不过只是学了单链表的相关操作,为了更好的完成头文件的小任务,我打算下周认真学习数据结构的链表部分。下面我汇报一下我觉得比较重要的知识点:
     1.数组问题:对于数组元素的排序,以前接触到的只有冒泡法,而这次则又系统的学习了交换法和选择法,其中印象比较深刻的就是选择法中采用了标记最大(小)值的方法来减少交换的次数,从而提高了排序的效率。字符数组在使用scanf()函数时有几点值得注意:数组名是数组的首地址,故前面不能再加&符;输入字符串的长度应不超过字符数组定义的长度;空格、回车、跳格符因不能被读入,输入遇到这些字符时,系统认为输入结束。解决办法可采用字符串处理函数gets()。
     2.指针:指针的重要作用有以下四点:(1).指针为函数提供修改变量值的手段。(2).为动态内存分配提供支持。(3).为动态数据结构提供支持。(4).可以改善一些子程序的效率。另外值得注意的地方还有:指针必须经初奴化后才能使用、指针在增1和减1时其指针值是增、减(基类型)个字节。当指针采用如下方式(int *p = &a;)赋值时的理解,另外,二维数组的指针引用方式很值得注意,地址可以表示成(a[i]+j),则指针可表示成:*(*(a+i)+j)或者是(*(a+i))[j],对于采用指针下标(p[i*n+j]或*(p+i*n+j))引用的方法我仍然不是很理解,只能够勉的记住。在学习到指针数组的时候我不得不感叹其使用的灵活性,特别在处理多个字符串时相比二维数组有其无法代替的灵活性和高效性,此外,我还对指向指针的指针有了点的了解,它常常和指针数组结合起来使用,用于对多个字符处理的场合。我还看到了带参数的main()函数,但对它的用法不是很了解。
     3.在学习结构体的时候,我也碰到了内存地址对齐的概念--偶数对齐,需要所有的数据类型从偶数地址开始存放来提高内存的访问效率,所以在引用结构体的成员时不能按字节计算地址的方法依次访问;如果想计算一个结构体实际所占用的内存,需要使用sizeof去算符。结构体传递函数的方式有三种:传递单个成员、传递整个结构、传递指向结构的指针,其中第二种因占用局部空间大,且具有单向值特性,故不常用。在链表的操作时往往要分是第一个节点、中间节点、最后一个节点,所以要特别注意。共用体采用开始地址对齐的方式分配地址空间。本章中还有一个比较重要的概念--位段,使程序按需分配内存(使用最少的位数)变成了可能,同时也可以实现既按字节进行访问,也可以按位进行访问,实现方法如下:先定义一个字节的结构体(bit_0~bit_7)八个成员,再定义一个共用体,让上面的结构体和一个字节共占同一个字节,此时就可以对共用体进行按字节或按位访问了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章