三天学会C语言编程|上篇

本文试图通过上中下三篇文章引领大家进入C语言的世界。C语言是一个非常古老(1972年发明)的语言了,想必大家都有所了解,没有了解也没关系。C语言以难学和难以使用著称,想用好C语言更是难上加难。

本文不假设读者有任何其它编程语言的基础,但需要了解计算机的基本概念。对计算机的体系结构有基本的概念。如图1是本文简化的计算机结构,其核心是CPU和内存,其中CPU用于运行代码,而内存则用于存储程序代码和数据。输入输出设备可以简单的理解为我们电脑的鼠标、键盘和显示器。

图1 计算机体系结构简图

这里有一点需要注意的是,内存是被划分为一个一个单元的,我们可以简单的理解为一个单元的大小是1字节(Byte,也即8位),如图1右边所示。并且,内存以该单元为单位进行编址,也就是定义内存的地址。这个地址可以参考我们日常的门牌号,这样CPU才知道数据访问的位置。

环境搭建

本文进行C语言开发基于Linux环境进行,之所以使用Linux是因为该环境下不需要安装负载的工具。本文假设采用的Linux发行版是Ubuntu系统,如果不清楚如何安装该系统可以参考本号的最详细的图文安装Ubuntu教程|如果还不会你找我一文。具体安装可以在虚拟机上安装,这样使用起来比较方便。

具备该操作系统环境之后,需要安装C语言源代码的编译工具。在Linux的编译工具是gcc,在Ubuntu上可以非常方便的安装该工具。执行如下命令即可安装该工具:

sudo apt-get build-dep gcc 

或者执行如下命令也可以安装该工具:

sudo apt-get install build-essential 

安装完成后,执行如下命令可以验证是否安装成功:

gcc --version 

如图提示版本信息则代表安装成功了,如果提示命令不存在则代表安装失败了。

第一个程序

为了有一个整体的认识,本文先给一个可以运行的完整的代码。如下是一个可以直接编译运行的C语言代码。

#include <stdio.h>
int main(void)
{
 printf("hello world!
");
}

可以将上述代码在Windows上通过记事本保存为一个hello.c文件,然后拷贝到Linux系统中。或者如果会使用Linux下的vim工具的话,通过该工具创建一个hello.c文件,并将上述代码拷贝到该文件中,然后保存。然后在hello.c文件所在的目录下执行如下命令:

gcc -o hello hello.c

这样就会生成一个可执行文件,这个文件类似于Windows下面的*.exe文件。在该目录下,输入如下内容就可以执行该可执行文件:

./hello

执行后可以看到输出的内容(hello world!)。至此,我们完成了第一个C语言程序的开发、编译和运行。

第一个程序的解释

C语言是编译型的语言,也就是说起源代码需要编译成可以被CPU识别的格式(机器码)之后,才能在Linux上运行。与之相对的是解释型的语言(例如Python,PHP等),这种语言可以直接在解释器中运行,不需要编译生产其它格式的文件。

第一行(#include <stdio.h>)表示我们需要引用一个在其它地方已经实现的功能(也就是后面使用printf)。所有语言都提供了一下“轮子”,这样我们就不用从零开始。我们可以借用这些“轮子”拼装成我们的“汽车”,这样能大量的节省工作量。

第二行(int main(void))是C语言的入口,每个C语言程序都有一个这样的入口函数(后面解释什么是函数),而且必须是这个格式。这里int是该函数的返回值,表示是一个整型数;main是函数的名称,这个是固定的,不能变化;void是参数。

第三行({)和第五行(})是函数的开始和结束标识,每个函数都包含这两个标识。

第四行(printf("hello world! "))是一个函数调用,这个函数有其它程序实现的,这里我们借用了该功能。printf的功能是向终端打印内容,因此我们执行程序是会在终端看到hello world!字符串。

有些细节还没讲到,可以先照着葫芦画瓢。

今天先到这,后续文章介绍数据类型、变量、控制语句和函数等内容。

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

推荐阅读更多精彩内容

  • 第一章:编译和安装SCons第二章:简单编译第三章:编译相关的一些事情第四章:编译和链接库文件第五章:节点对象第六...
    仙灵儿阅读 11,506评论 0 3
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,611评论 0 10
  • TITLE: 编程语言乱炖 码农最大的烦恼——编程语言太多。不是我不学习,这世界变化快! 有时候还是蛮怀念十几、二...
    码园老农阅读 5,171评论 2 35
  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 7,656评论 0 27
  • 画着画着发现鞋的种类有这么多,我们可选择的不少噢。 让我感觉温暖的是每年过年,姥姥送给我们一家每人...
    思维导图实战派_叶飞阅读 1,863评论 1 3