快速学习C语言一: Hello World

估计不会写C语言的同学也都听过C语言,从头开始快速学一下吧,以后肯定能用的上。 如果使用过其它类C的语言,如JAVA,C#等,学C的语法应该挺快的。

先快速学习并练习一些基本的语言要素,基本类型,表达式,函数,循环结构, 基本字符串操作, 基本指针操作,动态分配内存,使用结构表示复杂数据, 使用函数指针实现灵活逻辑。

虽然C是一个规模很小的语言,但也得自己多设计一些练习练手才能学会。

我就记得char, int, 别的都不常用吧应该,用的时候再搜索。

和JAVA, C#差不多吧,不用学基本,各种算数运算符,关系运算符,逻辑运算符,逗号, 括号等的意思应该也差不多,表达式最终的结果也有类型和值。

函数是最基本的抽象,基本没有什么语言没有函数的概念,它封装一系列操作, 最简单的Hello world,如下。

我们的练习都是随手写的函数,不需要被外部调用,所以前面加个static,表示只在 本文件内可见。

printf输出一行的话,最后要加 \n, 常见个格式化参数有%d,%c,%s,%p等,分别表示 输出int, char, 字符串, 指针。

和别的语言差不多,不过i的声明要放在函数开头,c89就是这样。

库函数 strlen就是干这个的,不过我们自己可以写一个练手,c没有字符串类型, 用’\0’结尾的字符数组表示字符串,所以for循环从头滚到’\0’位置就好了。

const 修饰符表示这个参数不能在函数里进行更改,防止意外改动。char *就是传说中 字符串了。 写C程序得用好for语句,有各种惯用法,用好了可以写出很紧凑的程序,比如上面for语句 的第2个分号后的逗号表达式可以递增两个变量。

第一种方式是在编译时分配的内存,是字符串常量,指针s1指向的内存不能更改。 第二种方式应该是在栈上分配的内存(不确定),可以通过指针修改其中的字符。

指针可以进行加减的操作,每加一次就滚动过它指向的类型长度, 比如char指针就是 滚动1个字节。

c = *p表示取出指针p指向的字符,赋值给变量c,*表示取值。

*p = *str相当于 p[i] = str[i],右边的 _取出来的是值,左边的_取出来的也是值, 值赋值给值,看起来有些诡异,但就是这样写的。反正 p = *str肯定不对,因为p是 指针类型,*str是计算结果是字符类型。

我记得TCPL前几章都没讲malloc,free等内存分配的函数,好多任务只需要在编译阶段 分配内存就够了,但比较大型复杂的程序应该都需要动态管理一些内存的。

C语言没有GC,要手工释放动态分配的内存,否则就会造成内存泄漏,所以一定要配平 资源,有malloc的地方,一定要想好它应该在哪里free。

目前我了解到的原则就有两种:

  • 谁分配,谁释放
  • 谁使用,谁释放

对了, malloc出来的内存要强转成你需要的指针类型,然后free时指针要滚到你动态 分配内存的起始点。

C没有类,要表达复杂的数据,就得用结构了, 结构也可以用指针来指,如果是结构变量 的话,引用成员用 .,如果是指向结构的指针,引用成员用 ->

别的好像没啥特别的,注意动态分配结构数组后,指针滚动的边界,别使用了界外的 内存。如果结构的成员指向的内存是动态分配的花,也记得free。

没有结构,估计写不出大程序,结构应该会用的很多。

好多语言都有高阶函数的特性,比如函数的参数或返回值还可以是个函数, C里也有函数指针可以达到类似的效果,用来做回调函数等。

但C的函数指针写起来比较诡异,不好记忆,不行就用typedef来重新命个名,写起来 简单一些。

下面用一个比较经典的冒泡排序来演示函数指针的使用,传递不同的比较函数可以 改变排序函数的行为,这是写复杂灵活逻辑的一种很方便的方式。

这几年断断续续看了四五遍K&R的《TCPL》了,可一直都没写过C程序,现在开始多练习 练习吧。

Original: https://www.cnblogs.com/onlytiancai/p/3841726.html
Author: 蛙蛙王子
Title: 快速学习C语言一: Hello World

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/536375/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球