【从零开始学C语言】知识总结一:C语言的基本知识汇总

点击蓝字

a5456a6b020ed94f2e21050068498ce3.png

关注我们

因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享

来源于网络,侵删

C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作 为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机 硬件的应用程序。

事实上,C语言是一个很小的内核语言,只包括极少的与硬件有关的部分,C语言不直接提供输入输出语句,有关文件都是要文件操作的语句和动态内存管理等操作都是要使用到系统提供的库函数来实现的,可以说C语言就是一种结构化程序语言,这是一种分的思想, 以Hello World程序为例,可以建立两个函数,一个输出Hello,一个输出World。

7bf127f8175efdf692172c2dde81e078.png

2、C语言的数据类型列表:(后边再详解)

整型、浮点型(实数型)、单字符型、字符串型、数组类型、指针类型、结构体类型、共用体类型

3、C语言的控制语句列表:(后边再详解)

跳转型:goto语句、break语句、continue语句、return语句

判断型:if-else语句

循环型:do-while语句、while语句、for语句

选择语句:switch-case语句

4、最简单的C程序:

#include<stdio.h>
int a=3;      //这是全局变量  a在整个程序中都可以起作用
void f(int n);    //里边的n就是形式参数int main(void){
int n;        //在这里定义一个n和形式参数的n互不影响
int b=50;      //这是局部变量     b出了main函数它就没有作用了 
int a=2;      //  在这里定义一个a和外边那个a没有联系if(a>b){        //这种就是复合语句 (包括其他循环、选择语句) 
int a=1;         // 在再这里定义一个a和外边那些a没有联系  但是
//根据变量的特点  如果相同变量名称的时候 
//复合语句的变量会覆盖外边main函数的a,main函数的a会覆盖外                           // 边全局变量的a  
//(小覆盖大)
}
}void f(int n){
int n;//这里定义一个n也和形式参数的n没有任何联系
}

1 )、一个程序由一个或者多个源程序文件组成,一个源程序中只有一个mai函数(主函数)

2)、预处理指令:

1、 如#include<stdio.h>,(还有其他的指令,用到再讲)C编译环境在对源程序进行“翻译”之前,都会先去做一个事情,先由一个预处理器,对预处理指令进行处理,对于<stdio.h>指令来说,就是在使用标准函数库中的输入输出函数时,编译系统要求程序提供有关的信息,#include 叫做文件包含命令 它的作用就是用来提供这些信息的,用来引入对应的头文件(.h文件),这样才能调用库函数。

2、#include 的处理过程很简单,就是将头文件的内容插入到该命令所在的位置,从而把头文件和当前源文件连接成一个源文件,这与复制粘贴的效果相同。

3、使用尖括号< >和双引号" "的区别在于头文件的搜索路径不同:

使用尖括号< >,编译器会到系统路径下查找头文件;

而使用双引号" ",编译器首先在当前目录下查找头文件,如果没有找到,再到系统路径下查找。

5、全局变量和局部变量:

#include<stdio.h>inta=3;//这是全局变量  a在整个程序中都可以起作用voidf(intn);//里边的n就是形式参数intmain(void){intn;//在这里定义一个n和形式参数的n互不影响intb=50;//这是局部变量    b出了main函数它就没有作用了 inta=2;// 在这里定义一个a和外边那个a没有联系if(a>b){//这种就是复合语句 (包括其他循环、选择语句) inta=1;// 在再这里定义一个a和外边那些a没有联系  但是//根据变量的特点  如果相同变量名称的时候 //复合语句的变量会覆盖外边main函数的a,main函数的a会覆盖外                    // 边全局变量的a  //(小覆盖大)}}voidf(intn){intn;//这里定义一个n也和形式参数的n没有任何联系}复制代码

1、局部变量  只能在声明的函数内部使用,离开了声明的函数,就不能使用该变量了。不同的函数可以使用相同名字的变量,它们代表不同的对象,互不影响,形式参数也是局部变量,在一个函数的内部也可以在复合语句中定义变量,这些变量中也只是在本复合语句中有效。复合语句称为分程序,或程序块。

2、全局变量不仅可以在main函数中,而且可以在别的函数中使用,也就是说全局变量是可以在程序中的任意地方使用。它可以增加函数之间数据的联系,它在程序的全部执行过程中都会占用存储单元,是函数的通用性。总结来就是说两者作用域不一样

6、C函数的定义:

一个C程序是由一个或者多个函数组成的,但是其中必定要有且只有一个main函数,程序开始也是从main函数开始的。

一个函数包含两部分:1)函数首部,函数的第一行:函数类型、函数名,(函数参数类型,函数参数名称),其是(形式参数),形式参数可以是void ,也可什么都没有。2)函数体,表示函数花括号下的程序,一般都有:声明部分,一般在使用一个变量之前,必须进行对其声明定义类型(数据类型),在每行数据声明或者C语句后必须有一个分号表示结束。

7、说明:

C语言本身不提供输入输出语句,输入输出的操作都是要调用系统库函数scanf和printf等函数来实现的,而此函数是在<stdio.h>,文件里面,所以在开头必须先预处理此头文件。

而形参和实参:当我们调用函数时,对其传入的参数和函数体内接收到的参数其实并不是同一个变量。调用函数时向函数传入的参数称作实际参数,简称实参,而函数体内部用于接收外部调用时传入的参数的参数称为形式参数,简称形参。

8、C程序运行步骤:

编程—>编译—>链接

1、编程:在编译环境中书写程序,编写好了之后,系统会将此源程序,以.c为后缀的文件形式存放在指定的文件夹中,如 f.c文件

2、编译:编译环境会对源程序进行语法检查,如有发出错误信息提醒编程人员修改,直到没有语法错误,编译程序自动将源程序转换为二进制形式的目标文件  是以后缀.obj文件保存。

3、 链接:经过编译所得到的二进制目标文件,还不能别计算机直接执行,它们还只是零散的一个个部件,必须由链接程序将编译后的目标文件和函数库还有其他生成的文件组成起来,生成一个计算机能执行的可执行文件。后缀名为.exe文件

9、C变量存储方式与生存期:

1、在c语言中,变量的作用域 可以分为全局变量和局部变量,而从另一个角度说,变量的储存有两种不同的方式,静态储存方式和动态储存方式。静态指的是程序运行期间  由系统分配固定的空间给程序,而动态  则是程序运行期间 需要根据情况进行动态分配储存空间的方式

2、内存中使用储存空间的情况,可以分为以下三种:

(1)程序区

(2)静态储存区,存放全局变量 负责给程序运行时分配内存区  在静态数据区,内存中所有的字节默认值都是0x00

(3)动态储存区,它存放以下数据:

1、函数形式参数,在调用函数时给形参分配储存空间

2、函数中的自动变量

3、函数调用时的现场保护和返回地址等

4、对变量的储存类型有四种,分别是:auto (自动变量)、static (静态变量)、register( 寄存器变量)、 extern(外部变量)

对以上这些数据,在函数开始调用时分配动态存储空间,函数结束时释放这些空间。在 c 语言中,每个变量和函数有两个属性:数据类型和数据的存储类别

1- auto  (自动变量)

在程序的函数中的局部变量,如果不专门声明为静态(static)存储方式,都是自动分配动态的地址存储空间。包括复合语句和函数的形参 都是的,自动变量用关键字 auto 为声明。重点是这些变量在函数调用完毕后它们都会被系统给释放回收内存

2- static 静态变量(局部变量)

有时候,我们希望自己的局部变量不被函数调用完毕后消失,而继续保持原值,其占用的储存单元不是释放,用关键字 static 进行声明 这类变量叫静态变量。它和全局变量相同的是,在函数调用结束后,它并不释放内存,保留其当前值,而且在整个程序运行时,都不释放内存。不同的是。它本质还是局部变量,在其他函数中也不能使用它,而且,它只能进行第一次赋值,在整个程序运行时,它只会保留上一次函数调用结束时的值。

一个被声明为静态的全局变量可以被模块内(源程序)所用函数访问,但不能被其他模块外(源程序)其他函数访问,它是一个本地的全局变量

一个被声明为静态的函数只可被这一源程序的其他函数调用.那就是,这个函数被限制在声明它的模块本地范围内使用

全局变量(外部变量)的说明再冠以static

就构成了静态的全局变量。当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用,因此可以避免在其它源文件中引起错误。

把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域,限制了它的使用范围(只能在本地)

static函数与普通函数作用域不同,仅能在本源文件内使用此函数。

3- register( 寄存器变量)

在程序运行时,如果一个变量,被频繁使用,那么系统就必须多次访问内存中的单元,会影响程序执行效率,因此为了提高效率,就产生了寄存器变量,它可以直接将局部变量的值存放到CPU的寄存器中,需要时,直接从寄存器中取出参数运算,不必经过内存中取存储,由于受硬件寄存器长度的限制,所以寄存器变量只能是char、int或指针型。寄存器说明符只能用于说明函数中的变量和函数中的形参,因此不允许将外部变量或静态变量说明为"register"。由于寄存器的存取速度远高于对内存的存取速度,所以这样可以提升执行效率。

4- extern (外部变量)

一般来说外部变量是函数的外面定义的全局变量

如果没有在头文件中定义有外部变量(文件的知识)

那如果在一个程序中如果需要在一个源文件内扩展到另一个源文件的作用域的全局变量,就可以在定义函数时引用extern关键字将该变量转为“外部的变量”,表示将此变量的作用域扩展到此位置,有了此声明,就可以在其他源文件中使用此变量了。

将全局变量的作用域扩展到其他文件,可以先在一个文件中定义一个变量,然后再在其他文件中用extern定义相同名字的变量,就可以将作用域扩展到整个程序的结束了。

*注  如果在文件1中的全局变量加了static那么这个变量就会被限制在此文件中了,在文件2中使用extern也访问不到文件1的全局变量了

在一个函数声明前加extern 此函数就会可扩展作用域,可以在其他文件中使用此函数。

e7e966d66e9c861740d04b8f1e67e5ee.gif

如果你年满18周岁以上,又觉得学【C语言】太难?想尝试其他编程语言,那么我推荐你学Python,现有价值499元Python零基础课程限时免费领取,限10个名额!
▲扫描二维码-免费领取

戳“阅读原文”我们一起进步

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337186.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排球分组循环交叉编排_同学!中国海洋大学第一届排球联赛等你来战!

New中国海洋大学第一届排球联赛开始啦比赛宗旨1亲爱的同学们&#xff1a;为增强学生凝聚力&#xff0c;加强新老生交流&#xff0c;促进各院系的友谊&#xff0c;培养同学们的团队精神&#xff0c;丰富同学们的课余生活&#xff0c;展示我校文体风采&#xff0c;特此举办本次中…

jolokia_使用WildFly 9和Jolokia监视DevOps样式

jolokiaDevOps是当今最热门的话题之一。 并且围绕它的广泛主题使您很难真正找到完整的描述或涵盖体面粒度的所有内容。 可以肯定的一件事是&#xff1a;最重要的部分之一是提供正确的度量标准和信息以监视应用程序。 Java EE和JMX 监视Java EE服务器的标准方法是JMX。 使用JCo…

计算机的本质是哲学

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删学什么抽象模型庄子说过吾生有崖&#xff0c;知无涯。以有限的生命去学习无尽的知识是很愚蠢的。所以&#xff0c;学习的终极目标一定不是知识本…

用户首次登录之前必须更改密码_技术丨带你玩转Win10系统的用户账户

由于微软关于Win10家庭版系统用户和组的功能设置&#xff0c;在一般情况下&#xff0c;用户无法直接进行用户账户的管理。但通过简单的设置&#xff0c;同样能够玩转Win10系统的用户账户。今天我们将探索并学习&#xff1a;如何实现用户账户的设置与更改。Microsoft账户登录首次…

mac 大写锁定延迟_延迟分析中的案例研究:锁定与同步

mac 大写锁定延迟特别是在这篇文章中&#xff0c;我们将讨论&#xff1a; java.concurrent.Lock创建的垃圾 比较锁与同步 如何以编程方式测量延迟 争用对锁和同步的影响 遗漏对延迟测试的影响 回到我最喜欢的主题之一&#xff0c;垃圾创建/分配。 有关此主题的更多详细信…

很好玩的12个c语言面试题

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删12个C语言面试题&#xff0c;涉及指针、进程、运算、结构体、函数、内存&#xff0c;看看你能做出几个&#xff01;1.gets()函数问&#xff1a;请…

java 开发 jvm_Java开发人员应了解的JVM流行语

java 开发 jvm本文将与您分享一些JVM“流行语”&#xff0c;它们对于Java开发人员在执行任何JVM性能和垃圾回收调优之前理解和记住非常重要。 本文末尾还提供了一些技巧&#xff0c;包括一些高级性能调优最佳实践。 将来的文章中将探讨有关Oracle HotSpot并发GC收集器&#xff…

C/C++在Java、Android和Objective-C三大平台下实现混合编程

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删Android和iOS开发都支持C开发&#xff0c;可以一套代码多平台使用。同时C难以反编译的特性也可以为Android开发带来代码的保密&#xff0c;另一n…

vs不一致的行尾对话框怎么调出_SolidWorks工程图打开后图纸没有了空白了怎么办?还能找回来吗?...

SolidWorks工程图打开后图纸没有了空白了怎么办&#xff1f;还能找回来吗&#xff1f;答案是肯定的。不知道大家使用SolidWorks有没有遇到这种情况&#xff0c;如下图所示&#xff1a;就是我们本来画好标注好的工程图&#xff0c;竟然没了&#xff0c;怎么造成的呢&#xff1f;…

jpa 忽略bean_在WildFly上将JPA和CDI Bean与骆驼一起使用

jpa 忽略bean我并没有真正为此计划&#xff0c;但是在一个免费的会议月份中&#xff0c;我有机会进行了一些深入的探讨&#xff0c;并向您展示了WildFly-Camel子系统提供的WildFly魔术上的更多Camel。 商业背景 该演示来自Christina Lin在JBoss Demo-Central上的一个演示 。 她…

【如何系统地学习 C++ 语言】关于C++,有哪些你需要提前知道的知识?

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删C是一种通用的、面向对象的编程语言&#xff0c;可用于开发操作系统、游戏、图形用户界面、后端以及高性能系统和应用程序。所以&#xff0c;尽管…

【如何系统地学习 C++ 语言】从开发环境到C++进阶,应该怎么办?

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删开发环境如前面介绍的那样&#xff0c;C属于一种静态的编译型语言&#xff0c;所以&#xff0c;开发环境配置过程中就需要用到对应的编译器。C有…

高度可定制化的方案_如何开发高度可定制的产品

高度可定制化的方案您是否听说过&#xff1a;“我们非常喜欢您的产品……除了一些小细节。”&#xff1f; 然后&#xff0c;CIO推出了一系列其他“必备”要求的清单&#xff0c;其中有数百个要添加到您的惊人产品中。 您是否听说过&#xff0c;甚至说过&#xff1a;“团队&…

文言文编程?厉害了程序员!

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删你能看出来&#xff0c;这首诗妙在哪里吗&#xff1f;来源&#xff1a;量子位&#xff08;ID&#xff1a;QbitAI&#xff09;&#xff0c;梦晨 萧…

sublime快捷键代码对齐_Python配置sublime运行环境

1、下载安装python和sublime&#xff0c;不再赘述&#xff0c;官网即可下载&#xff1b;2、打开subilme&#xff0c;打开Tools > Build System > New Build System..3、点击New Build System后&#xff0c;会生成一个空配置文件&#xff0c;在这个配置文件内覆盖配置信息…

C语言贪心算法

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删01基本概念贪心算法是指在对问题求解时&#xff0c;总是做出在当前看来是最好的选择。也就是说&#xff0c;不从整体最优上加以考虑&#xff0c;…

C++最佳实践 | 可维护性

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删C最佳实践:1. 工具2. 代码风格3. 安全性4. 可维护性&#xff08;本文&#xff09;5. 可移植性及多线程6. 性能7. 正确性和脚本可维护性避免使用编…

springboot启动自动关闭_App自动化测试用例格式和App的启动与关闭

【一】基本的用例格式这里使用unittest测试框架来编写用例。注&#xff1a;unittest可以提供用例的组织和管理、预期结果验证、批量化运行、产生测试报告等功能。新建一个calculator的python package&#xff0c;新建一个calculator_test.py&#xff0c;导入以下包。按照标准的…

C++最佳实践 | 可移植性及多线程

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删C最佳实践:1. 工具2. 代码风格3. 安全性4. 可维护性5. 可移植性及多线程&#xff08;本文&#xff09;6. 性能7. 正确性和脚本可移植性明确使用的…

eap aka_使用API​​密钥(aka身份验证令牌)部署到Maven Central

eap aka如何在不使用未加密本地密码的情况下与Maven Central / Nexus通信&#xff08;尤其是使用Gradle&#xff0c;但不仅限于此&#xff09;。 基本原理 不幸的是&#xff0c;Gradle&#xff08;和许多其他构建工具&#xff09;没有提供任何机制来本地加密密码&#xff08;或…