专栏首页C语言C++游戏编程零基础如何快速精通C语言?要注意什么?
原创

零基础如何快速精通C语言?要注意什么?

精通C语言是有难度的,却也不是没有方法。

首先,内存意识。

C语言和其他高级语言不一样,它的很多操作都是直接面向内存(面向硬件)。

困难的是,对于C语言,不论是数据类型、操作符、语句、函数,都或多或少、或简单或复杂地通过地址操作内存。

幸运的是,一旦掌握内存,代码功能会非常强大,执行效率非常之高。

举个例子。

如何把一个二进制数转换成十进制以字符的形式输出?

做过十进制位数分离的程序员都知道,可以采取“模10再除10”的方法把一个二进制数按十进制分离每一位。

尝试着去理解下面的程序。

while(putchar(value % 10 + '0') && (value /= 10))

;

putchar()函数的原型是int putchar(int ch);执行结束返回1。

这个代码风格已经算优质了,只不过这样是倒序的,想要实现正序排列可以使用递归。

void binary_to_ascii (unsigned int value)

{

unsigned int quotient;

quotient = value / 10;

if(quotient != 0)

binary_to_ascii(quotient);

putchar(value % 10 + '0');

}

但是当你明白了字符串常量的原理后,你可能会写出这样不平凡的代码。

while(putchar( "0{{123456789:0}}" [value % 10] ) && (value /= 10))

;

这是因为,一个字符串常量存储在内存的某一位置,调用它的时候,并没有把整个字符串传递进去,而是只传递一个指针常量(一个地址),然后执行和数组相同原理的下标引用。没错,你可能猜到了,也猜对了,数组名也是一个指针常量。

小编推荐一个学C语言/C++的学习裙【 六二七,零一二,四六四 】,无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

其次,掌握原理。

掌握哪些原理?数据类型、操作符是重点。

典型的,指针、数组、结构体、一些重点操作符。

以操作符为例:

++操作符:a++和++a它们的机制分别是什么?

a++:我们称为后++,首先a生成一份拷贝,然后a执行++,最后返回拷贝。返回的拷贝值是旧a,新a已经执行了++操作。

++a:我们称为前++,首先a执行++,然后a生成一份拷贝,最后返回拷贝。a先执行++,再拷贝,返回的拷贝就是新a。

如何理解拷贝?简单学习汇编语言,了解机器内部的运算方式,就可以理解。

&&和||操作符:先执行左表达式,再执行右表达式,如果左表达式就能确定整个结果,则不执行右表达式。

如果你知道while语句和scanf()、putchar()的原型,那么下面这个语句将不难理解。

while(scanf("%d", ch) && ch != EOF)

putchar(ch);

scanf()换成getchar()也可以,这里只是想提醒大家scanf()的原型。

如果你足够理解for语句和表达式,看下面这个代码。

int a[n], *vp;

for(vp = a; vp < &a[n]; ){

*vp++ = 0;

}

这个代码有两个问题:功能是什么?是否有错误?

第一个问题:功能是实现数组的初始化。

第二个问题:没有错误。其一,&a[n],指向数组外,指向并不会有错误,但是不能执行间接访问,即*vp=a[n]是非法的。其二,for语句,括号内需要三个表达式,最后一个不写,表示空表达式,空表达式也是表达式。

最后,清晰概念。

什么是预处理、什么是表达式、什么是语句、什么是函数、什么是操作符、什么是数据类型。

只有真正能区分它们的不同,你才能理解各种复杂的代码。

p=&a和*p=&a,在一定的语句下,都可以是正确的,它们又有什么不同?

什么是声明、什么是定义、什么是调用。

它们作用于不同的数据类型是否有本质上的区别。

比如说,声明一个变量,就要分配内存。声明一个结构体,不会分配内存,只有定义一个实体的时候,才分配。它们的实现原理不同,具体使用就会有细微的差别。

什么是常量、什么是变量、什么是指针常量char * cnost f、什么是常量指针char const *f、什么是指针函数char *f()、什么是函数指针char (*f)(),等等。

区分它们,只有一个办法,掌握操作符优先级,变量f先和什么结合,f就是什么,前面剩下的,就是返回类型。

char * cnost f:f是常量,并且是指针,返回类型为普通的char。指针常量,指针的值不能变,指针指向的数据可变,比如数组名。

char const *f:f是普通的指针,返回类型是char const。指针的值可变,指针指向的数据不能变。常量指针,面向接口编程常用的方法。

char *f():()的优先级比*高,所以f是一个函数,返回类型是一个char型指针,返回类型为指针的函数。指针函数,动态分配内存的好方法。

char (*f)():同为(),优先级相同看结合性,自左向右。f是一个指针,指向一个返回为char型的函数。函数指针,回调函数的实现方法。

掌握了上面的知识就能精通C语言么?

显然是远远不够的,我只是从我的角度总结了几个方面,给出一些建议。

而真正要做到精通,只有不断的学习。

我有一个微信公众号,经常会分享一些C语言/C++技术相关的干货;如果你喜欢我的分享,可以用微信搜索“C语言学习部落”关注

欢迎大家加入千人交流答疑裙:627+012+464

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 人生需要规划,学好C语言编程,把握自己的未来,are you ready?

    C语言和其他高级语言不一样,它的很多操作都是直接面向内存(面向硬件)。困难的是,对于C语言,不论是数据类型、操作符、语句、函数,都或多或少、或简单或复杂地通过地...

    猫咪爱分享
  • 新手入门C语言编程:使用函数必须知道的三点注意事项!

    C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)。

    猫咪爱分享
  • 无形细节最为致命,C语言中与零值比较那些小事儿

    无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“。小编给大家推荐一个...

    猫咪爱分享
  • C语言 | 每日基础(40)

    读者:有个函数, 本该返回一个字符串, 但当它返回调用者的时候, 返回 串却是垃圾信息。

    闫小林
  • 这种div高度自适应确定你知道吗?

    _simple
  • 信息爆炸时代,如何阅读更有效?

    2011 年时,在豆瓣上看过一篇文章,简单浏览了一下,觉得写得很好,就顺手推荐了,也是替自己“mark”存档。单击“推荐”按钮时,我脑袋里突然飘来一句,“那些‘...

    博文视点Broadview
  • 耶鲁开发“进击的黏土”!穿两层衣服就变身机器人:给自己捏形状,还能越障

    除了施瓦辛格的那句经典台词,“I will be back”,看过第二部的小伙伴应该都记得这个经典的场景。

    大数据文摘
  • ABP入门系列(5)——展现层实现增删改查

    这一章节将通过完善Controller、View、ViewModel,来实现展现层的增删改查。最终实现效果如下图: ? 一、定义Controller ABP对A...

    圣杰
  • 从零开始学 Web 之 移动Web(九)微金所案例

    相关源代码已放置github:https://github.com/Daotin/Web/blob/master/Code/src/11/wjs.zip

    Daotin
  • 浅谈 KVO 的实现原理

    KVO 全称 KeyValueObserving 是 Objective-C 对观察者模式(Observer Pattern)的实现;KVO 提供一种机制,当指...

    s_在路上

扫码关注云+社区

领取腾讯云代金券