只要按照这三个步骤学习,小白快速入门精通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');

}

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

;

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

*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语言么?

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容