为了账号安全,请及时绑定邮箱和手机立即绑定
C 语言中的指针

C 语言的指针常常被人们认为是 C 语言中的灵魂所在,可以完成很多高难度的操作。但是更多的人感觉 C 语言的指针的存在如同噩梦一般,因为稍不注意,就会引起灾难性的后果。不管你是不是喜欢 C 语言中的指针,我们都要学习这种看起来很神奇的东西。因为指针这个概念不是 C 语言首创的,而是苏联的计算机科学家首创的。

C 语言的编译

上一个小节 C 语言的程序结构中我们简单的认识了一下 C 语言的程序到底由那些部分组成,但是仅仅了解 C 语言的程序结构还不够,仅仅是万里长征走完了第一步,后面还需要进行很多的步骤才能让程序成为一个可以使用的工业产品。还记的上一个小节中我们提到的 gcc 吗?其实这是一个 C 语言的编译器,这一个小节我们就来学习一下编译器这个概念。

4. 为什么要学习 NumPy ?

Numpy 是基于 C 语言开发,因此继承了 C 语言运算速度快、消耗资源少等优点,并且 Numpy 被广泛应用于数据分析、机器学习和深度学习等领域,因此掌握 Numpy 对能力提升和职场晋升的重要性不言而喻。

C 语言程序结构

上一个小节 C 语言的简介中我们对 C 语言已经有了一个简单的了解。这一节我们就来看一下 C 语言的程序结构,了解了 C 语言的程序结构之后我们才能正式的开始编写 C 语言程序。下面我们来看一个最简单的 C 语言可执行程序:

C 语言中的多维数组

C 语言中的多维数组与我们在数学中学习到的多维数组是一致的。如果你还不知道什么是多维数组也没有关系。多维数组可以看成是之前学习过的数组的扩展。它能让你完成一些仅仅依靠一维数组没有办法完成的事情。让很多事情完成的更为简单。

C 语言中的字符串

在前面 C 语言的变量类型中介绍过 C 语言中的变量类型。不知道大家有没有注意到,在 C 语言中有字符类型的变量,但是没有其他编程语言中经常出现的字符串类型,在 JAVA 或者 C# 中用 string 这个关键字来声明其类型。但是在 C 语言中是没有这个变量类型的。

6. 为什么要学习 Go 语言

综上所述, Go 语言出身名门,血统纯正。从学习难度上来说语法简单,功能强大。从可扩展性上来说第三方库众多,标准库强大稳定。性能上更是拥有无可挑剔的自动调度线程。Go 语言完美地协调了运行效率和开发效率之间的关系。而且 Go 语言目前已经广泛应用于虚拟容器、区块链等传统的和高精尖的产业中,将来会有巨大的前景。不管是国内还是国外,对 Go 语言的程序员的需求只会越来越多。

3. C 语言的应用

了解了发明过程就大致知道了 C 语言的应用场景。基本的应用场景是操作系统的编写。当然现在 C 语言的应用已经大大超出了这个范围。因为 C 语言与生俱来的特性是很容易与底层硬件打交道,所以目前 C 语言大量应用在需要直接硬件交互的场景。比如最近很多的物联网中的嵌入式设备,底层驱动,高性能计算,游戏后端服务,图形处理等等。但是由于 C 语言不支持原生的面向对象的开发模式,因此有人说过,对于 C 语言,最大的工程就是开发一个操作系统。如果你想开发更为复杂的系统,请使用别的语言。但是这不代表 C 语言已经过时了。恰恰相反, C 语言正在我们的生活中发挥着比以前更为重要的角色,你的手机,你的身边的智能终端,甚至你家的扫地机器人,都无时不刻都有 C 语言的身影。图2: 用 C 语言实现的 MP3 播放器 [4]图2: 用 C 语言实现的 MP3 播放器内部 [4]

C 语言字符串练习

在 C 语言中字符串的应用比较多,所以在这里我们实现一个函数,函数功能是将一串给定的字符串中的大写字符全部转换为小写字符。

4. 学习基础

学习这门课程首先至少需要会一门编程语言,最好是 Java 语言,因为接下来的示例程序会选择用 Java 语言编写。有一定的数学基础,可以理解一些数学定义。

1. C 语言标准历史

序号别称全称1C18ISO/IEC 9899:20182C11ISO/IEC 9899:20113C99ISO/IEC 9899:19994C95ISO/IEC 9899:1990/AMD 1:19955C90ISO/IEC 9899:19906C89ANSI X3.159-1989最新执行的 C 语言的国际标准是序号为 1 的 C18 标准(ISO/IEC 9899:2018 (C18)),这个标准是 2018 年通过的 C 语言国际标准。那么 C 语言的标准中都规定了哪些内容呢?下面我们一起来看下:

C 语言中的 maclloc free()

在几乎所有的情况下, C 语言都可以自动的来分配内存,这不需要你的参与。这很高效,也很安全。这也是目前主流语言所采取的策略。但是 C 语言除了系统自动分配和回收内存,还可以自己手动来分配和回收内存,让你的程序更具有灵活性。

6. 学习基础

Ruby 是一门对新手非常友好的语言,任何零基础的人都可以学习这门语言。由于语言特性,文章中会充斥着面向对象的思想,如果可能的话,最好先去理解一下面向对象的概念。

4. C 语言的特点

C 语言有如下的特点:代码简洁不繁琐;具有良好的可移植性,代码与机器底层独立(相对于汇编语言而言);属于中层编程语言(底层的为汇编语言等,高层的为 Java 语言等);结构化语言;丰富的程序库可以使用;可以直接管理内存;运行速度快;提供了指针操作;可以使用递归;具有良好的扩展性。

1. C 语言编译器

每个语言都需要编译器,甚至包括可以直接操作 CPU 内部寄存器的汇编语言。编译器的作用就是将我们用接近人类自然语言编写的程序翻译成计算机可以直接执行的二进制文件。其实使用二进制是人类在计算机发明过程中妥协于工程实践的一个行为。因为从最高效率的数字进制来说,三进制其实更为有效率,但是实现起来不那么容易。C 语言的编译器有非常多种,下面我们列举了一些,供大家参考。编译器编译器作者支持的操作系统是否有相关的集成开发环境授权许可类型AMPCAxiomatic Solutions Sdn BhdWindows,Unix & OtherYesProprietaryAmsterdam Compiler KitAndrew Tanenbaum and Ceriel JacobsUnix & OtherNoBSDCCS C CompilerCCS, Inc.Windows,Unix & OtherYesProprietaryClangLow-Level Virtual MachineWindows,Unix & OtherNoBSDDMS Software Reengineering ToolkitSemantic DesignsWindows,Unix & OtherNoProprietaryGCC CGNU ProjectWindows,Unix,IBM mainframe, AmigaOS, VAX/VMS, RTEMSNoGPLRCC (RCOR C Compiler)Rodrigo Caetano (rcor)Windows,UnixNoGPLInteractive CKISS Institute for Practical RoboticsWindows, Unix, Mac, Linux, IRIX,Solaris, SunOSNoLabWindows/CVINational InstrumentsWindows,Unix & OtherYesProprietarylccChris Fraser and David HansonWindows,Unix & OtherWindows onlyFreeware (source code available for non-commercial use)Mark Williams CMark Williams CompanyWindows,OtherYesProprietaryMicrosoft CMicrosoftWindowsYesProprietaryNwccNils WellerWindows,Unix,OtherNoBSDOpen64SGI Google HP Intel Nvidia PathScale Tsinghua University and othersUnix,OtherNoGPLPelles CPelle OriniusWindowsYesFreewarePGCCThe Portland GroupWindows,Unix,Other— Mac OS XYes — Visual Studio on WindowsProprietaryPortable C CompilerAnders Magnusson and othersWindows,Unix,OtherNoBSDPower CMix SoftwareOtherNoProprietaryQuickCMicrosoftWindowsYesProprietarySAS/CSAS InstituteWindows,Unix,Other-IBM mainframe, AmigaOS, 68K, 88K, UnixYesProprietaryTiny C CompilerFabrice BellardWindows,UnixNoLGPLTurbo CEmbarcaderoOtherNoProprietary - V 2.01 freely availableCCS C CompilerCCS, Inc.Windows,Unix,OtherYesProprietaryMikroC CompilerMikroElektronika, Inc.Windows,Unix,OtherYesProprietaryups debugger (includes C interpreter)Tom Hughes, Ian Edwards, and othersUnix,Other-Solaris, SunOSYesGPLVBCCDr. Volker BarthelmannWindows,Unix,OtherNoFreeware (source code available,XL CIBMUnix-AIXEclipseProprietary当然,编译器还与计算硬件平台息息相关。同一个编译器会因为计算机体系结构不同而分为不同的版本。如 arm64,armhf,x86, x86_64,PowerPC 等等。在本教程中,我们主要会使用到 gcc 编译器。同时我们会在 arm64,armhf,x84_64 等硬件平台上编译我们的程序。从中可以看出 C 语言的移植性还是很好的。同样的程序,我们可以在不同的编译器以及硬件平台上编译执行。Tips:请大家注意,我们的学习要求操作系统为 Windows 10,Linux, Unix, 或者 MacOS。对于微软已经停止维护的 Windows 7 以及更早的系统。我们没有办法使用新的特性来编译和运行相关的程序。

C 语言中的变量

在讲解变量之前,我们先来看一段代码:int x;int y=0;char z='A';x=6;在上面这段代码中出现的 x、y、z 都是一个 C 变量。变量是编程语言中不可或缺的组成部分。它承载这存贮数据以及计算结果等等功能,顾名思义变量就是可以再计算执行过程中变化的量。这节课我们来学习下到底什么是变量。

C 语言中的 union

由于 C 语言是强类型语言,不能如同某些语言一样,可以在变量中存储任意元素。所以在有的时候会遇到一些问题。比如你有一个变量需要存储计算结果,计算结果有时可能是整数,有时可能是浮点数。这里我们介绍其中可以做到不更改变量名就可以存储不同类型数据的变量。

1. C语言的起源

C 语言是一种高级语言,最初由 Dennis M. Ritchie [1] 为了开发一个操作系统而设计,最早在 1972 年在 DEC PDP-11 计算机上被首次实现。

2. C 语言标准内容

这里我将国际标准化组织最新的 C 语言的标准的一部分内容放在这里,因为所有的标准都不是免费提供的,有兴趣的同学可以购买看一下全文。那么这些标准里面都有哪些内容呢?因为我并没有购买 C 语言的最新标准,所以我找了一点来自于 C 语言标准中描述。下面这段话就通过文字的描述,定义了有关 main 函数的细节:The function called at program startup is named main. The implementation declares no prototype for this function. It shall be defined with a return type of int and with no parameters: int main(void) { /* ... */ }or with two parameters (referred to here as argc and argv, though any names may be used, as they are local to the function in which they are declared): int main(int argc, char *argv[]) { /* ... */ }or equivalent;10) or in some other implementation-defined manner.这里写明了 main 函数是做什么的,应该怎么写,包含了什么参数以及返回值等。正确的 main 函数的正确的书写方法应该是 int main(void) { /* ... */ } 或者 int main(int argc, char *argv[]) { /* ... */ } 。而不是我们国内随处可以看到的 void main(void) {/* ... */} 或者 void main(int argc, char *argv[]) { /* ... */ }。这种写法在有的编译器下是会产生错误的,导致编译无法进行。而且这个返回值是可以输出的,可以作为程序是否正确执行的判断,比如你可以用返回值 0 放在程序执行完整后返回,返回 0 就可以判断程序完整执行了。如果返回了其他数值,那么程序就出现了异常。由于购买标准太贵了,需要 198 瑞士法郎,折合人民币 1422.08 元,所以这里只能给大家看一点从其他网站上找到的信息。不过超过 500 页的标准全文对于大家学习这门语言也没有太大的益处。只要记住在最新的是最好的就可了。

5.8 添加C/C++支持

本部分会学习如何在 Android Studio 中添加 C/C++ 支持,包括 NDK 及 CMake相关的知识。 Android 应用开发很多都是使用 Java 或 Kotlin 语言,但是对运行效率要求比较高或者对安全性要求比较高的模块,往往会采用 C/C++来编写。通过本部分的学习之后,我们就会了解如何在 Java 中调用 C/C++ 接口。

6. 我们为什么要学习 C 语言

如果你想要从事下面的工作,那么 C 语言将是你非常好的一个选择:从事需要直接操作操作硬件的编程的嵌入式设备开发,不需要操作系统的支持。比如我们常见的冰箱,洗衣机等等的控制;嵌入式操作系统和实时操作环境下的开发;基于 Linux 操作系统下的一些应用程序。主要是中间层面应用的开发,直接可以与底层硬件交互,而本身又不直接与最终用户进行交互;音频和视频的解码器和编码器等;协议栈的开发。

7. 学习基础

在这个教程中,大家最好能够对于 Linux 操作系统有使用经验。有简单的 Shell 命令使用经验。我们遇到的所有的操作基本都是通过命令行来进行的。虽然我也很喜欢图形界面操作,这也是趋势,但是 C 语言目前主要的应用场景都是在 Linux 下,所以大家最好学习一下相关的知识。

5. 与其他开发语言对比

Go 语言为什么能在现有的成熟语言中脱颖而出呢?这要归功于它比 Java 还简洁的语法,接近 C 语言的编译执行速度,甚至还有不亚于脚本语言的开发速度。在目前最要求效率的当下,它无疑会是一匹黑马。但是和其它语言比起来劣势也很明显,因为它出现的时间短,学习资料少,第三方支持库虽然多,但是比起 Java 以及 C 语言还是远远不够。Go 语言不支持泛型,对于学习 Java 的开发人员来说一开始会很不适应。

7. 学习基础

在开始学习并发编程之前,学习者需要掌握 JavaSE 的知识,这是学习并发编程的语言基础,也是 Java 程序员必备的基本功。

C 语言中的类型转换

我们在前面学习了 C 语言的数据类型,那么变量在参与运算的时候类型是始终如一不变的吗?带着这个疑问,我们可以先看一个例子:#include <stdio.h>#define typename(x) _Generic((x), /* Get the name of a type */ \ \ _Bool: "_Bool", unsigned char: "unsigned char", \ char: "char", signed char: "signed char", \ short int: "short int", unsigned short int: "unsigned short int", \ int: "int", unsigned int: "unsigned int", \ long int: "long int", unsigned long int: "unsigned long int", \long long int: "long long int", unsigned long long int: "unsigned long long int", \ float: "float", double: "double", \ long double: "long double", char *: "pointer to char", \ void *: "pointer to void", int *: "pointer to int", \ default: "other")int main(){ int a=1,b=2; float c=3.14159,d=0; printf("a type: %s, b type: %s, c type: %s, d type: %s\n",typename(a),typename(b),typename(c),typename(d)); a=b+c; printf("a=b+c, a=%d\n",a); printf("type (b+c): %s\n",typename(b+c)); d=b+c; printf("d=b+c, d=%f\n",d); return 0;}经过编译运行后得到如下的结果:Tips:有关如何编译运行的内容请参考前面的章节。Tips:同时值得注意的是,这个程序中的 _Generic 来自于 C11 标准中,所以在你之前可能看到的 C 语言的书籍中是没有的。请大家不要使用过于古老的编译器,请使用推荐的较新的编译器。也就是支持 C11 以上标准的编译器。具体情况可以参照你们所选择的编译器的手册。或者直接选择 GCC 7 及更新版本的编译器。a type: int, b type: int, c type: float, d type: floata=b+c, a=5type (b+c): floatd=b+c, d=5.141590这里面的 a, b 变量为整形,而 c 和 d 都是浮点型。那么当一个整形和一个浮点型相加的时候会发生什么呢?这就是我们今天要介绍的内容。

C 语言的标准

什么是标准?标准是对重复性事物和概念所做的统一规定,他以科学技术和实践经验的结合成果为基础,经有关方面协商一致,由主管机构批准,以特定形式发布作为共同遵守的准则和依据。在这个标准概念大行其道的今天,如果大家在生活中稍微注意一下,其实可以很容易发现,我们生活在一个标准化的世界里,每个产品的外包装或者标签上都会注明相应的执行标准。标准贯穿着我们的衣食住行。。总而言之,标准无处不在。当然标准具有行业性与地域性。每个国家基本都有自己的标准,这些标准有些是自己独立创造的,但更多的,为了与国际上大部分标准兼容,基本上会使用国际上一些通用的标准,只是改一下名字就可以了。作为软件行业中的老大哥级人物。C 语言也有自己的标准,而且是国际标准。如果大家遵循同一个标准,那么就会避免分歧的产生,避免出现很多不必要的麻烦和困扰。按照这统一标准就不会出现不兼容的问题。我们先来看下 C 语言标准的发展历史:

1. C 语言的注释标准

C 语言的注释目前有两种:多行注释(经典式注释)单行注释(C++ 式注释)

C 语言中的 while 循环

while 循环语句是 C 语言中最常用的三种循环语句之一。很多时候我们会使用这种循环来处理无穷无尽的各种请求和响应。

5. 学习基础

在开始学习 Java 并发工具之前,大家需要掌握以下技巧:操作系统基本知识,Java 并发编程是基于操作系统基础之上的,了解操作系统基本原理,尤其是操作系统的任务调度管理知识,对理解并发编程工具很有必要。Java 语言基础语法,后继章节中采用 Java 语言做示例。

2. C 语言中定义变量

在 C 语言中定义变量如下:int x;上面这行代码就声明了一个名为 x 的变量,这行代码分为三部分:int:int 表示变量存储的数据类型。数据类型的概念我们下个小节详细讲解;x:x 表示变量名称;;:C 语言代码每一行都用分号结尾。

首页上一页1234567下一页尾页
直播
查看课程详情
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号