C语言学习记录230613

        说到C语言,其实因为不是科班出身,确实不甚了解。已经在本职行业辗转工作多年后,想想自己其实从高中毕业乃至在大学期间都想学习编程,也不知道自己现在从头学习晚不晚,但起码希望未来的自己不会后悔,也不想给自己留下遗憾。

        目前是报了一个教育机构,从头学习,那边的老师也给我说没碰到过我这个年纪的,沟通过后,也是劝我三思而后行,我反复思考过后,觉得即使不转行,我把这套编程的能力作为我技能的一部分,也未尝不可,因此还是下定决定好好学习它。当然,除此以外还有很多想法,有突破自己的想法,有追求自我的想法,也有看向未来的想法,这都是好的。也有不好的,对未来的不安,对未知的恐惧,对可能产生的后果有所担忧。但可能这就是我的幼稚吧,扪心自问,我无法告诉我的内心,我不想去学。

        内心中客观的我对着感性的我只好叹气一声, “好吧,那仅仅只是去学习,那就去吧~”

        接下来我会每天依照自己的学习内容,结合自己学到的知识,发布博客,一方面是为了整理每天学习的知识,另一方面,也是时刻提醒自己,自己有着明确的目标,这让我想起了自己的高中、大学,自己渴望挑战的内心从未改变过。

        其实此前已跟着Mooc的翁凯老师上完了C语言入门和进阶的课程,PTA的207题也已经刷完了,不过考虑到不同教育机构可能传授的内容有所不同,我还是决定一切从头,就当自己是个空杯子,是个什么都不懂的人,耐下心来从头学习。至此学完了第一节课,意外有了很多收获,主要是概念方面的。

        (一)计算机发展及语言的相关概念补充

                此前我在《C语言设计——现代方法》(后续用C方法表示)一书中,也看到了相关的发展历史,那本书里主要讲了C语言的起始,主要是Ritchie和Kernighan的事情,从DPD-7一直到C语言的诞生,以及《K&R》是什么等等,这本书写的很详尽,但由于类似于历史,我仅看过两三次,实在是记不大清。而我在这也主要是想补充说明一些东西,更方便我自己总结。

                语言的发展大致如下:

                机器语言→汇编语言→高级语言

                机器语言也就是0101110101这种0和1组成的语言;而汇编语言指的是用有意义的字母去代替特定一组01的方法,如0101→APP,这里用APP代替0101,APP被称为助记符,相比于0和1的机器语言,汇编语言显然更适合人来写,但人仍然需要记住这些助记符,还有很大的困难;后来出现了如B语言、C语言等高级语言,这类语言就更接近于人类的语言,我们能更方便的去编写代码。

                此外,C语言一直有人跟我说是应用于底层开发的语言,那么什么是底层开发语言?或许不准确,但是今天的课讲的比较通俗易懂,我可能理解了。从下往上堆叠的形式,硬件→驱动层→操作系统→应用,以操作系统为分界线,操作系统、驱动层、硬件均属于下层(底层)。而操作系统以上的,直接跟用户交互的应用层,则属于上层。因此C语言主要用于底层的开发,那C语言不能做上层开发吗?并不是,C语言同样能用于上层开发,但所谓术业有专攻,C语言相比其他语言,他更擅长于底层的开发。

        (二)第一个C语言程序

                想来第一个C语言程序不外乎是printf("Hello World"),自然难以出彩,但对完全没有接触过的人来说,看着头文件和主程序,大概会一脸懵。课程里老师讲的也不错,但这里我觉得《C方法》的相关概念表达更为合适。一般来说第一串代码是下述构造的:

#include<stdio.h>

int main(void)

{

        printf("Hello World");

        return 0;

}

                程序大致分为三个部分,指令、主程序、语句,#include<stdio.h>是指令,也是头文件,头文件是什么呢?头文件类似于我们解一道数学题,直接套用了某个公式,但是有的人不知道你这个公式出在哪里,容易莫名其妙,这个头文件就就能起到引用的作用,说明你这个公式出自哪里,而你写了这个头文件,就说明你接下来有部分公式要来自这个头文件里的所指的地方,顺便一提,这种引用头文件并且是C语言自带的函数,我们称之为库函数。

                主程序则是,int main(void)以及花括号以内的所有内容,相当于一个主体,后续会有很多自定义函数,这时候需要明确主次,程序的起点和结尾,main是主体,这个程序的起点入口从这里开始,结尾也在这里结束。

                最后是内部的语句printf和return都属于语句,再缩小范围,他们则都属于函数,当前课程深度,其实只需要知道他们是语句就行了。

                (三)局部变量和全局变量

                很意外,在第一堂课就直接讲了局部变量和全局变量,但这也不差,两者主要差别来自于两个新的概念,生存期和作用域,在《C方法》一书中,则为存储期和作用域,这里以书本的说法讨论,课程内容基本与我在书中所学大致一致,存储期(生存期)指内存分配给这个变量内存空间后至收回这个空间的时间,而作用域指这个变量能起作用的范围。

                局部变量具有自动存储期和块作用域,自动存储期指这个时间是自动的,为什么说自动?因为他的起始点就是包含这个变量的函数起始点,这个内存分配回收都是自动的。块作用域则指的是这个变量能被使用的作用范围是从这个函数中,这个变量被声明的那一点开始,到这个函数结束。

                全局变量具有静态存储期和文件作用域,静态存储期就简单了,整个程序的全程就是静态存储期,换句话说这个数据随时都在,而不会因为离开某个函数后,这个变量的值因为被内存回收而丧失。文件作用域指这个程序在这个文件内都能被使用,也很简单。

                那么如果是大型文件有好几个文件呢?全局变量只有文件作用域,如果让其他文件也能使用这个变量呢?这时候需要在全局变量前面使用extern即可,但从《C方法》一书的例子,以及建议中可以看出,其实并不建议采用全局变量,因为可维护性可读性都很差。

                此外,局部变量前面加static能使局部变量的存储期变为静态存储期,这里就不展开说明了。

                (四)变量类型

                课程中是简单列出了整数类型(整型)和浮点数类型(浮点类型),通俗来说就是整数和带小数的区别,但从变成角度看,这两者就有较大差异了,这里只简单介绍下各个类型,整数类型按范围从小到大可以分为short(short int)、int、long(long int)、long  long(long long int),这里的long long是C99才有的新类型。浮点类型按数值范围从小到大主要为float、double、long double,这里long double也是C99才有的新类型。这里注意下都是有符号的值,如果想要采用无符号值,则只需要在各个类型前面再加个unsigned即可,这是负数范围的值会加到正值内。C语言默认会有一套逻辑,int默认是有符号的值,如果想用无符号则需要加之前的英文,再具体就不能展开说了,因为很长。计算机的算术计算要求两个操作数的类型一致,也就是位数一致,这里不妨思考下当两个类型不同的操作数碰到一起时,是依照何种逻辑进行转化,最后进行计算的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值