你知道怎样学习C语言吗?
如何学习C语言,在学习C语言的时候一定要掌握什么知识?在这里我给大家写出了一点点小计划,不喜勿喷,谢谢!
《C Primer Plus》、《C缺陷和陷阱》、《C和指针》、《C专家编程》。
1、 strlen()函数的返回值是什么类型的?
2、 字符串strlen() 的值,是否和他占据的内存空间相同?
3、 你是否知道strcpy 函数存在的潜在风险?如何避免?
4、 如果一个字符串没有字符串结束符,而调用str 开头的库克,会发生什么?
5、 Strcpy(),strcat(),strcmp(),strncpy(),strncat(),strncmp()内部到底是如何运行的?这些函数到底对源字符串和目标字符串做了些什么?你是否观察过它们运行时两个字符串内存的变化?
6、 上面这些函数使用时,各有哪些需要注意的地方?
7、 你会几种字符串查找操作?
8、 c语言中有字符串这个数据类型吗?
9、 对字符串进行操作的时候,是否为字符串结尾符预留存储位置?不然的话容易造成非常访问内存。
1、 你肯定知道,定义“int a[10]; ”, a[10] 这个元素是无效的。
2、 你知道几种数组初始化的方法?
3、 数组和指针有千丝万缕的联系而又不同,你是否对他们在不同情况下的使用进行过详细的总结?
4、 “int calendar[10][20]; ”,这是一个什么样的数组?它拥有 10 数组类型的元素,还是 20 个?
5、 “int a[10]; ”,数组名 a 在本质上是一个什么?你是否打印过 a 的值?
6、 你知道几种获取数组某元素的方法?
7、 指针和数组相同吗?什么时候相同?什么时候不同?
8、 用指针和下标访问数组元素,那种方式更快?
1、 你知道什么是位域结构体吗?如何定义它?如何使用它?
2、 你知道字节对齐对结构体占用内存空间大小的影响吗?如何计算结构体占用内存的大小?
1、 你知道宏的本质是什么吗?函数?语句?类型定义?或者其他?
2、 你知道语言设计者为什么设计宏大吗?这些原因目前是否仍然成立?
3、 你会设计带有参数的宏吗?
4、 你知道使用宏的参数的时候的注意事项吗?
5、 你会设计带有可变参数的宏吗?
6、 你知道使用宏有什么劣势吗?
7、 你有没有更好的替代方案?
1、 是否可以指定枚举中各项的值?
2、 如果不指定值,枚举的第一个值是多少?
3、 枚举的值是否可以是负数?
4、 定义枚举的时候,你是否专门定义了枚举的最小值和最大值?
1、 switch(c)中的 c 的数据类型有哪些?
2、 你是否在所有的switch 中都加了 default 语句?
3、 是否在所有的case 中都加了 break 语句(一般情况的做法)?如果你不加 break ,将会发生什么?
1、 static的三个主要作用是什么?
2、 static的修饰的局部变量是保存在什么地方的?全局变量哪 ?
3、 static修饰的全局变量和函数,在其他的文件中是否可以访问?如何访问?
4、 你知道static 是 c 语言中是实现封装和隐藏的利器吗?你是否经常使用?
5、 定义在不同源文件中的static 全局变量,编译器是否允许他们的变量名称相同?他们在内存中的地址是否相同?函数那?
1、 你是否经常使用const 来表明不能够被更改的变量?
2、 你是否经常使用const 常量来代替宏?
3、 下面四种情况,你知道是各自表示什么意思吗?
int i_value= 10;
const int* pvalue = & i_value
int const *pvalue = & i_value
int* const pvalue=& i_value
const int* const pvalue =& i_value
4、 你知道const 常量如何初始化吗?
1、 对于字符数组,strlen 和 sizeof 的值是否相同?
2、 S izeof本质上是函数还是宏?
3、 S izeof的返回值是什么类型?
1、 “int *p; ” &p , p , *p 他们的值分别表示什么含义?
2、 你定义的指针初始化了没?
3、 你理解指针的指针的概念吗?你会使用吗?
4、 “int *pi_value; pi_value = 0x100000; ” pi_value + 1 的值是是多少?
5、 你会定义函数指针吗?
6、 你会使用函数指针调用函数吗?
7、 关于指针和数组,请参见知识点数组。
1、 动态分配的内存是保存在什么地方的?
2、 什么情况下使用动态分配内存?
3、 动态申请内存一定要释放,否则会内存泄露。你是否使用过内存检测工具?
1、 如何查看函数在内存中的地址?
2、 如何给一个函数指针赋值?
3、 你是否会定义可变入参函数
4、 你是否可以区分函数的形参与实参?
5、 如何定义函数名,以准确的表达函数的用途?
6、 你是否使用const 来修饰函数入参和返回值,以表的特定的含义?
7、 递归如何使用?
1、 全局变量,局部变量,常量分别保存在内存中的什么地方?
2、 不同类型的变量,你是否知道其作用域?
3、 全局变量和局部变量是否可以重名?你是否在这样做?
4、 局部变量在函数退出后是否有效,为什么?
5、 全局变量为什么不允许定义在头文件中?有何危害?
1、 链接位于编译过程的那个阶段?
2、 动态链接库和静态链接库使用时有何区别?
3、 如何 对 动态链接库 进行 动态加载 (不用重启程序而加载链接库)?
4、 动态链接有何优点?
5、 动态链接库中是否定义了非static 的全局变量?你是否知道这是一个非常危险的动作?
6、 动态库中的全局变量(非static )和函数(非 static )是否可以和上层全局变量和函数重名?重名后会发生什么事情?
1、 你知道什么是段的概念吗?
2、 可执行程序可以分为几个段?每个段保存的是什么内容?
3、 如何查看可执行程序各个段的大小?
4、 当函数被调用时发生了什么?
5、 你有没有试过程序的栈空间最大有多大?程序超过此大小会发生什么?
6、 你使用的系统的栈是向下生长的,还是向上生长的?
1、 如何避免对同一头文件的多次include ?
1、 什么是 声明 ,什么是定义?
2、 你是否会运用c 语言声明的优先级规则?
1、 软件的首要技术使命 是 管理复杂度。
2、 优秀程序员的 一个特质 是将复杂的事情简单化,而非将简单的问题复杂化。所以,他们一般会选择简单的解决方案。
3、 极尽机巧,复杂的解决方案,除了将新手搞得晕头转向之外,别无他用。
4、 阅读优秀程序员的代码,是一种享受,你很少遇到思维的阻力,你可以尽情的享受简单之美。
这些是C/C++能做的
服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等。
对于热爱编程的人来说,有一群一起学习一起解答的小伙伴很重要!如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!
编程学习书籍分享:
编程学习视频分享:
整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!
运行C程序的步骤和方法
计算机不能直接识别和执行用高级语言写的指令,必须用编译程序把C源程序翻译成二进制形式的目标程序,然后再将该目标程序与系统的函数库以及其他目标程序连接起来,形成可执行的目标程序。
在编好一个C源程序后,怎样上机进行编译和运行呢?一般要经过以下几个步骤:
(1)上机输入和编辑源程序。通过键盘向计算机输入程序,如发现有错误,要及时改正。最后将此源程序以文件形式存放在自己指定的文件夹内,文件用.c作为后缀,生成源程序文件,如f.c
(2)对源程序进行编译,先用C编译系统提供的“预处理器”对程序中的预处理指令进行编译预处理。例如,对于#include<stdio.h>指令来说,就是将stdio.h头文件的内容读进来,取代#include<stdio.h>行。由预处理得到的信息和程序其他部分一起,组成一个完整的,可以用来进行正式编译的源程序,然后由编译系统对该源程序进行编译。
编译的作用首先是对源程序进行检查,判断它有无语法方面的错误,如有,则发出“出错信息”,告诉编程人员认真检查改正。修正程序后重新进行编译,如有错,再发出“出错信息”。如此反复进行,直到没有语法错误为止。这时,编译程序自动把源程序转换为二进制形式的目标程序,如果不特别指定,此目标程序一般也存放在用户当前目录下,此时源文件没有消失。
在用编译系统对源程序进行编译时,自动包括了预编译和正式编译两个阶段,一气呵成。用户不必分别发出二次指令。
(3)进行连接处理。经过编译所得到的二进制目标文件(后缀为.obj)还不能供计算机直接执行。前面也说明:一个程序可能包含若干个源程序文件,而编译是以源程序文件为对象的,一次编译只能得到与一个源程序文件相对于的目标文件,它只是整个程序的一部分,必须把所有的编译后得到的目标模块连接装配起来,再与函数库相连接成一个整体,生成一个可供计算机执行的目标程序,称为可执行程序,在Visual C++中其后缀为.exe,如f.exe。
即使一个程序只包含一个源程序文件,编译后得到的目标程序也不能直接运行,也要经过连接阶段,因为要与函数库进行连接,才能生成可执行程序。
以上连接的工作是由一个称为“连接编辑程序”的软件来实现的。
(4)运行可执行程序,得到运行结果。
以上过程如图所示,其中实线表示操作流程,虚线表示文件的输入输出。例如编辑后得到一个源程序文件f.c,然后在进行编译时再将源程序文件f.c输入,经过编译得到目标程序文件f.obj,再将所有目标模板输入计算机,与系统提供的库函数等进行连接,得到可执行的目标程序f.exe,最后把f.exe输入计算机,并使之运行得到结果。
一个程序从编写到运行成功,并不是一次成功的,往往要经过多次反复。编写好的程序并不一定能保证正确无误,除了用人工方式检查外,还须借助编译系统来检查有无语法错误。从图中可以看到:如果在编译过程中发现错误,应当重新检查源程序,找出问题,修改源程序,并重新编译,直到无错为止。有时编译过程未发现错误,能生成可执行程序,但是运行的结果不正确。一般情况下,这不是语法方面的错误,而可能是程序逻辑方面的错误,例如计算公式不正确、赋值不正确等,应当返回检查源程序,并改正错误。
为了编译、连接和运行C程序,必须要有相应的编译系统。目前使用的很多C编译系统都是集成环境(IDE)的,把程序的编辑、编译、连接和运行等操作全部集中在一个界面上进行,功能丰富,使用方便,直观易用。
写出源程序后可以用任何一种编译系统对程序进行编译和连接工作,只要用户感到方便、有效即可。20世纪90年代,Turbo C 2.0用得比较多,但Turbo C 2.0是用于DOS环境的,在进入Turbo C集成环境后,不能用鼠标进行操作,主要通过键盘选择菜单,不大方便。有的人改用Turbo C++ 3.0,它具有方便、直观和易用的界面,虽然它也是DOS环境下的集成环境,但可以用鼠标操作菜单,因此在Windows环境下使用也很方便。近年来,不少人用Visual C++对C程序进行编译。Visual C++ 6.0既可以对C++程序进行编译,也可以对C程序进行编译。
不应当只会使用一种编译系统,无论用哪一种编译系统,都应当能举一反三,在需要时会用其他编译系统进行工作。
公众号《吧啦一会儿》,手把手带你撸代码
学习C语言的7个步骤,对照一下,看你处在哪个阶段?
C是编译型语言。如果之前使用过编译型语言(如,Pascal或FORTRAN),就会很熟悉组建C程序的几个基本步骤。但是,如果以前使用的是解释型语言(如,BASIC)或面向图形界面语言(如,Visual Basic),或者甚至没接触过任何编程语言,就有必要学习如何编译。别担心,这并不复杂。首先,为了让读者对编程有大概的了解,我们把编写C程序的过程分解成7个步骤(见图1.3)。注意,这是理想状态。在实际的使用过程中,尤其是在较大型的项目中,可能要做一些重复的工作,根据下一个步骤的情况来调整或改进上一个步骤。
图1.3 编程的7个步骤
1 第1步:定义程序的目标
在动手写程序之前,要在脑中有清晰的思路。想要程序去做什么首先自己要明确自己想做什么,思考你的程序需要哪些信息,要进行哪些计算和控制,以及程序应该要报告什么信息。在这一步骤中,不涉及具体的计算机语言,应该用一般术语来描述问题。
2 第2步:设计程序
对程序应该完成什么任务有概念性的认识后,就应该考虑如何用程序来完成它。例如,用户界面应该是怎样的?如何组织程序?目标用户是谁?准备花多长时间来完成这个程序?
除此之外,还要决定在程序(还可能是辅助文件)中如何表示数据,以及用什么方法处理数据。学习C语言之初,遇到的问题都很简单,没什么可选的。但是,随着要处理的情况越来越复杂,需要决策和考虑的方面也越来越多。通常,选择一个合适的方式表示信息可以更容易地设计程序和处理数据。
再次强调,应该用一般术语来描述问题,而不是用具体的代码。但是,你的某些决策可能取决于语言的特性。例如,在数据表示方面,C的程序员就比Pascal的程序员有更多选择。
3 第3步:编写代码
设计好程序后,就可以编写代码来实现它。也就是说,把你设计的程序翻译成C语言。这里是真正需要使用C语言的地方。可以把思路写在纸上,但是最终还是要把代码输入计算机。这个过程的机制取决于编程环境,我们稍后会详细介绍一些常见的环境。一般而言,使用文本编辑器创建源代码文件。该文件中内容就是你翻译的C语言代码。程序清单1.1是一个C源代码的示例。
程序清单1.1 C源代码示例
在这一步骤中,应该给自己编写的程序添加文字注释。最简单的方式是使用C的注释工具在源代码中加入对代码的解释。第2章将详细介绍如何在代码中添加注释。
4 第4步:编译
接下来的这一步是编译源代码。再次提醒读者注意,编译的细节取决于编程的环境,我们稍后马上介绍一些常见的编程环境。现在,先从概念的角度讲解编译发生了什么事情。
前面介绍过,编译器是把源代码转换成可执行代码的程序。可执行代码是用计算机的机器语言表示的代码。这种语言由数字码表示的指令组成。如前所述,不同的计算机使用不同的机器语言方案。C编译器负责把C代码翻译成特定的机器语言。此外,C编译器还将源代码与C库(库中包含大量的标准函数供用户使用,如printf()和scanf())的代码合并成最终的程序(更精确地说,应该是由一个被称为链接器的程序来链接库函数,但是在大多数系统中,编译器运行链接器)。其结果是,生成一个用户可以运行的可执行文件,其中包含着计算机能理解的代码。
编译器还会检查C语言程序是否有效。如果C编译器发现错误,就不生成可执行文件并报错。理解特定编译器报告的错误或警告信息是程序员要掌握的另一项技能。
5 第5步:运行程序
传统上,可执行文件是可运行的程序。在常见环境(包括Windows命令提示符模式、UNIX终端模式和Linux终端模式)中运行程序要输入可执行文件的文件名,而其他环境可能要运行命令(如,在VAX中的VMS[2])或一些其他机制。例如,在Windows和Macintosh提供的集成开发环境(IDE)中,用户可以在IDE中通过选择菜单中的选项或按下特殊键来编辑和执行C程序。最终生成的程序可通过单击或双击文件名或图标直接在操作系统中运行。
6 第6步:测试和调试程序
程序能运行是个好迹象,但有时也可能会出现运行错误。接下来,应该检查程序是否按照你所设计的思路运行。你会发现你的程序中有一些错误,计算机行话叫作bug。查找并修复程序错误的过程叫调试。学习的过程中不可避免会犯错,学习编程也是如此。因此,当你把所学的知识应用于编程时,最好为自己会犯错做好心理准备。随着你越来越老练,你所写的程序中的错误也会越来越不易察觉。
将来犯错的机会很多。你可能会犯基本的设计错误,可能错误地实现了一个好想法,可能忽视了输入检查导致程序瘫痪,可能会把圆括号放错地方,可能误用C语言或打错字,等等。把你将来犯错的地方列出来,这份错误列表应该会很长。
看到这里你可能会有些绝望,但是情况没那么糟。现在的编译器会捕获许多错误,而且自己也可以找到编译器未发现的错误。在学习本书的过程中,我们会给读者提供一些调试的建议。
7 第7步:维护和修改代码
创建完程序后,你发现程序有错,或者想扩展程序的用途,这时就要修改程序。例如,用户输入以Zz开头的姓名时程序出现错误、你想到了一个更好的解决方案、想添加一个更好的新特性,或者要修改程序使其能在不同的计算机系统中运行,等等。如果在编写程序时清楚地做了注释并采用了合理的设计方案,这些事情都很简单。
8 说明
编程并非像描述那样是一个线性的过程。有时,要在不同的步骤之间往复。例如,在写代码时发现之前的设计不切实际,或者想到了一个更好的解决方案,或者等程序运行后,想改变原来的设计思路。对程序做文字注释为今后的修改提供了方便。
许多初学者经常忽略第1步和第2步(定义程序目标和设计程序),直接跳到第3步(编写代码)。刚开始学习时,编写的程序非常简单,完全可以在脑中构思好整个过程。即使写错了,也很容易发现。但是,随着编写的程序越来越庞大、越来越复杂,动脑不动手可不行,而且程序中隐藏的错误也越来越难找。最终,那些跳过前两个步骤的人往往浪费了更多的时间,因为他们写出的程序难看、缺乏条理、让人难以理解。要编写的程序越大越复杂,事先定义和设计程序环节的工作量就越大。
磨刀不误砍柴工,应该养成先规划再动手编写代码的好习惯,用纸和笔记录下程序的目标和设计框架。这样在编写代码的过程中会更加得心应手、条理清晰。
C伴侣推荐
1、C Primer Plus 第6版 中文版
[美] 史蒂芬·普拉达(Stephen Prata) 著,姜佑 译
- 畅销的重量级C语言大百科全书
- C语言从入门到精通的入门经典
- 第五版销售超过250000册
本书详细讲解了C语言的基本概念和编程技巧。
全书共17章。第1章、第2章介绍了C语言编程的预备知识。第3章~第15章详细讲解了C语言的相关知识,包括数据类型、格式化输入/输出、运算符、表达式、语句、循环、字符输入和输出、函数、数组和指针、字符和字符串函数、内存管理、文件输入和输出、结构、位操作等。第16章、第17章介绍C预处理器、C库和高级数据表示。本书以丰富多样的程序为例,讲解C语言的知识要点和注意事项。每章末尾设计了大量复习题和编程练习,帮助读者巩固所学知识和提高实际编程能力。附录给出了各章复习题的参考答案和丰富的参考资料。
2、C Primer Plus 第6版 中文版习题解答
史蒂芬·普拉达(Stephen Prata),曹良亮 编
- 经典畅销图书《C,Primer,Plus》的学习伴侣
- 北京师范大学名师详细剖析所有题目
- 全面提升C编程能力的优选编程练习册
这是经久不衰的C语言畅销经典教程《C Primer Plus(第6版)中文版》的习题精解教程图书。 为了锻炼并提升读者的动手编程能力,《C Primer Plus(第6版)》除了在每章正文中包含了大量短小精悍的实例之外,还在每章末尾提供了颇有深度的综合性的复习题和编程练习题。 本书编者曹良亮博士尝试对这些复习题和编程练习给出了自己的理解和解答。 本书每章开篇先采用思维导图的形式给出了本章涵盖的知识点,然后采用简练的文字梳理了每章涉及的理论内容,最后对复习题和编程练习进行了详细的剖析,最后给出了解题思路和代码实现。 作为《C Primer Plus(第6版)》的理想学习伴侣,本书可以切实提升C语言初学人员的编程技能,掌握C语言编程的精髓,为后期的程序开发之路打下坚实基础。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。