夯实C基础,起步打扎实

        苹果开发的编码语言是Object C,说白了就是面向对象的C,而且OC是向下完全兼容C的,所以打好C的基础,自然是学习苹果开发的第一步。 记得,我在刚进大学的时候学的第一门语言便是C,当时为了测试自己的C水平,还去参加了二级C的考试,自然是首战告捷,呵呵。几年没碰C,忘得差不多,在网上找了些资料回忆复习,发现如果不计划深研究C,C其实没什么东西,接下来快速回想一下自己复习了什么。
        浏览一下计算机的进制转换和工作原理神马的,说白了计算机就是一堆的0和1,初步了解一下其工作原理,这些0和1是怎么存储怎么工作怎么运行的,如果有兴趣的话可以看看汇编的常用命令,不过那个东西一个月不用就能忘得干干净净了,记得大学时候汇编我可是学的杠杠的,不过再拾起来只有点似曾相识。大家都说C是相当底层的语言,其实就是C变汇编,汇编变01串,然后计算机就认得了,其实那些01串就是大家说的二进制文件,文本编辑器打开的话就是一堆的16进制的数,超出ascii码的就都是一堆小眼睛,让人看了有一种‘这些都是神马“的感觉。虽然这点东西不多,但我觉得搞懂那些01串怎么存怎么取很重要,不然后面的指针就不知所以了,我为此做了好多testDemo来猜测他的原理,话说为啥我不去直接看结果背结果呢?是因为这样才能更透的理解嘛。很多人觉得编码用不到这些,所以不认真不当回事,但我因为是复习不算是初学C,所以深刻明白他的重要性,复习的时候自然多花些功夫。
        接下来就是C语言的一些语法知识了,这些都是简单的小case,常见的:控制结构、数组、函数、指针、字符串、复合数据结构、位操作、内存管理、预处理、文件。其实C语言就这么点语法知识,其他的语言也都是换汤不换药的,要是学过其他语言,就会发现表现形式不一样,要表达的东西是一样的。
        控制结构,其实就是学会用if、switch、while、for、goto,不管什么语言其实说白了就这几种控制结构,这些就是告诉编译器我要执行哪行的代码了,懂了”控制“二字的含义,也就知道他们到底是干什么的了,也就知道了什么时候用什么控制结构了,那到底怎么选呢?说白了就是让编译器执行的代码行越少越好。
        数组,就是一堆类型相同的数据的有序集合,然后给这个集合门口贴一个门牌号,给每个元素门口放一个门牌号,然后访问读写什么的,C的数组只能存同种类型,不想OC,啥都能存,这点也要注意,其实大多数语言都是放同种的。
        函数,其实就是一个代码段,门口贴个门牌(函数名),告诉别人来我家的时候需要带着什么,我能给你什么的东西,拿完东西走人,互不干涉。
        指针,这个以前学的时候,头疼的很啊,现在再看有些顿悟了,从物理上来说,里面就是放着一个地址,告诉别人去哪里能看到别人家的门牌号,为啥叫指针呢,因为形象么,我站在大路上指着一个门说”这是小明家“,然后你顺着指针不就到了她家门口,然后就进了他家门,拿了他要给你的东西嘛。指针注意的就是不能瞎指,比如人家这块儿都写着”谢绝访问“,你还指过去不就崩了吗?还有就是指针既然就是个地址,自然是哪都能指,啥都能指,指着函数门口,指着数组门口,指着某个数,指着一个地址,甚至就是指着一个指针都是行的,因为他其实就是一个地址嘛。弄懂了本质的东西,什么变化就都是浮云了。
        字符串,我觉得这个东西在C中是一个很奇怪的存在,因为C中并没有字符串这个结构或者变量类型,他就是一个字符数组,可她却有相当多的方法,所以很多教程都把他当做一个数据类型来处理,其实吧,网上有字符串这些C库函数的源码,看看就会发现其实全篇就是三个东西:字符、数组、指针。如果把字符存在堆里的话,就剩俩东西了:字符、指针。弄懂了本质的东西,什么字符串函数调用就都是浮云了。
         复合数据结构,一般就是结构体struct、 枚举enum、联合体union。结构体和联合体在本质上都差不多,不同类型放在一起的数组一样的东西,就好像一个叫木须肉的东西,他是由木耳、胡萝卜、肉等不同的东西组合在一起生成的一个新的存在。结构体和联合体的区别就是存储了,弄清了这本质的区别,就会发现那些罗列的区别都是显而易见的。其实枚举是个特别强大的存在,我就特别喜欢他的存在,记得大一的时候,觉得他很多余,就是给几个数字定义几个别名,而今再见,发觉他甚是强大啊,不说OC库和C库中有多少枚举把,我自己就相当喜欢用枚举,这一个enum包含了多少的“一目了然”,给整形赋予了神奇的意义,给遍历都带来了方便啊,这三个结构中,最简单易用易学,最好用的就是他了。写个enum,给几个数字起几个别名,用include包进文件,这几个数字立即有了意义,“1不再仅仅是1,1仍旧还是1”--多么深刻的领悟啊。位操作,简单来说就是对计算机最底层的0和1的操作,与&、或|、异或^、取反~、左移<<、右移>>,这六个东西涵盖了计算机所有的运算,加减乘除什么的,计算机为啥会算,就是汇编把他们变成这几个东西的综合运算,其实计算机只会这几个运算,他哪里懂什么加减乘除和各种其他复杂运算,他只会对01串操作,也只会对01串进行这几个操作。这几个运算符是啥意思,怎么用呢,据说能写一本好厚的书。我认为呢,基本用法懂了也就行了,万变不离其宗,深刻的理解了她们的本质,也就知道了那些复杂的用法的变化。内存管理是一个经常不被重视可有让人不得不重视的问题,经常听到有些人说,看着那都对,语法也没啥问题,怎么就崩了呢?其实多半就是内存管理的问题了,我记得JAVA和VC什么的都是自动的垃圾回收机制,内存管理不用特别操心,C呢?他有个叫堆的地方,放的内存是要我们程序员去管理的,也就是手动管理内存,还有个叫栈的地方,那得内存是程序自己维护的。栈这个名字我觉的起得不好,有一种数据结构叫做栈,也就是先进后出的那个结构,不过此栈非彼栈。他其实就是一块内存区域的名字,就好像“小明家”一样,不过是对一块地方的一个名字,为啥叫栈呢,因为这块内存维护起来是跟栈一样,后进先出的,程序自己维护的,我们看不到也管不着,但我觉的看不到管不着也该知道,然后突然有一天就会发现“怪不得会跳到那个函数去执行,原来如此”,这么深刻的领悟是基于清楚的知道程序对“栈”这段内存是怎么管理维护的。至于堆,就要靠我们自己手动开辟手动释放了,首先为啥叫堆呢?因为他是好大一块地方,比栈大好多好多,而且维护呢,就是一堆堆在那里没什么特别的机制,而我们所谓的开辟空间不过就是跑过去贴个标签告诉别人,从这到那的这一块儿地方都是我的了,你们不许用啊,释放空间自然就是把标签拿走然后说,这块地方我不要了,你们谁都可以用,就是所谓的不安全地址,可以访问吗,当然,公共区域,谁都能往这放东西拿东西,可是既然谁都能放谁都能拿,就保不齐你刚放那准备一会去用的东西就被人家的东西挤没了,所以说能访问但不安全。但若是这块儿内存你再不用了,却不去把标签揭了,就不地道了,贴着标签别人用不了,自己又不用,这块地方不就浪费了?手动去贴标签站一块地方,用完了手动去把标签撕了,再让别人用,这就是动态内存分配手动管理内存机制。预处理,顾名思义,就是在 运行之前做的事,控制预处理的机制有很多,一般都带一个#号,就是在编译的时候就告诉程序 这些代码不要执行了,把需要他执行的代码编译成一个文件然后再去“执行”,预编译标注 的不需要执行的东西,IDE是不会去检查那段不需要执行的代码的,这样就方便调试和版本或是机型的设置了。文件管理其实只要会读写就好了,说白了就是三 个操作,打开、读写、关闭。fopen fclose,读写比较麻烦,分二进制流的读写和文本的读写,形式上不一样,本质上是一样的。
        C复习起来就这么点东西,细细研究起来就太多了,只是为自己学OC打个基础而已,所以复习的也不是很细致,我追求的就是对其尽可能深刻理解,理解其原理,其机制,表面的东西看看练练,库函数的源码,看看学学,用尽可能少的语句来实现功能,这是源码的一大特点啊,和大一时老师教的不太一样啊,再拾起来和初学的领悟却是不一样a。 
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值