初识C语言

写到前面的话

以下是一个C语言小白的学习心得笔记,希望帮助自己记忆也希望能帮助大家学习。如有错误希望大佬指正,谢谢。

一、什么是C语言?

以下是官方对于C语言的定义:

  • C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。
  • C语言能以简易的方式编译、处理低级存储器。
  • C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。
  • 尽管C语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的C语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。

官方对于C语言的定义肯定是很准确而全面的,但初学者难以理解所以我觉得作为初学者先知道它是啥东西(以下这句话)就可以了。

C语言是一门通用的计算机编程语言,广泛应用于底层开发。

C语言是一门通用的计算机编程语言

什么是计算机编程语言呢?

在现实生活中人与人沟通交流是尤其重要的,通过沟通别人才会知道我们想做什么,想表达怎么样的情感。沟通的首要条件就是语言,人类的语言有很多不同的地域就会有区分比如英语、日语、汉语等等。不同地域的人想互相沟通就需要学习不同的语言,虽然计算机不懂得我们的情感但是计算机功能强大它可以帮我们做很多事情所以我们需要与计算机进行沟通。想要与计算机进行沟通就要学会他们的语言就是机算计编程语言。C语言就是计算机编程语言的一种,还有很多其他的比如java python php等等。

C语言广泛应用于底层开发

什么是底层开发?

计算机由硬件和软件组成,只有硬件的情况下那就是一堆奇形怪状的铁块没有任何功能。那么想要控制这些铁块工作首先就要有操作系统(windows/Linus)这也是我们在这些硬件上安装的第一个软件。操作系统是通过驱动来让硬件进行工作的,那么在操作系统和硬件之间就还有一个驱动层次。在操作系统之上可以装载应用软件(微信,钉钉一类的应用软件)那这么说的话计算机就大体分了这几层硬件->驱动->操作系统->应用软件那么在应用软件层最贴近用户为最上层,在应用软件层之下层次就是底层,C语言就广泛应用与这些层次的开。当然C语言也可以进行应用软件开发早期WPS就是用C语言进行开发的只不过C语言更擅长于底层开发。
在这里插入图片描述

二、C语言的开发环境

我们用编程语言写的代码要在相应的开发环境下才正确运行。这里有的人可能就会问了,既然已经学会编程语言了那直接和计算机说话就好了为什么还要在相应的开发环境下呢?因为C语言并不能直接就可以和计算机对话了计算机是由数字电子电路组成,而最基本的电子元件就是门电路之所以被称为门是因为它只有导通和截止(开/关)两种状态,人们把导通也就是高电平记作为1截止也就是低电平记作为0 所以门电路输出就是二进制数。计算机是由门电路堆叠而成所以计算机能处理的数据就只能是二进制,二进制就是机器语言这说明计算机真正直接能看懂的是机器语言而不是我们现在学的编程语言。早期的时候就是用这种机器语言来进行编程的,但是这种语言耗时耗力(反正就是很难学,用起来也费劲)然后人们就在这个语言基础上发展了汇编语言但是这个语言还是不够好人们就又发明了高级语言就是咱们现在学的C语言,java之类的这种编程语言。虽然是高级语言但是最终和计算机进行沟通还是需要用010101这种二进制,所以就需要编译器来将咱们的写的程序进行处理编程计算机能直接看懂的机器语言然后才能和计算机进行沟通。(这个处理过程是很复杂的目前我也说不清,先入门以后再说。)所以我们需要一个编译器,初学者可以安装一个C语言的集成开发环境,集成开发环境里面就包括了编译器,编辑器、图形用户界面等工具网上有很多教程大家找来耐心点很简单就能弄好。 最初学校教的时候我使用的是dev c++感觉使用起来挺简单的,现在正在尝试用Visual Statio 这个功能更多一点吧

三、第一个C程序

一个简单的C语言程序,大家学习的程序应该都是这个吧

#include<stdio.h> //预处理命令

int main()//主函数
{
   printf("Hello World\n"); //打印语句
	return 0; //返回值x
}

这个程序的功能就是将Hello World这个语句在调试窗口打印出来
在这里插入图片描述
#include <stdio.h>这一行代码预处理命是令是C编译器在编译前的准备工作意思就是包含另一个文件,就相当于把stdio.h这个文件中的所有内容都输入到这行,我们才可以使用这个文件里面的功能函数 。这个程序当中的stdio.h文件包含了供编译器使用的输入输出函数例如printf()(printf函数的作用下面会写 )目前我们写程序都会包含这个stdio.h 文件,还有许多这样的文件以后就是用那个就包含个。
预处理下面就是主函数 int是返回值类型 main是函数名()内部是传入参数这个函数案例没有传入任何信息所以括号内部是void,下面花括号也是函数一部分标记了函数体的开始和结束。我们会在花括号内部写语句。
这给案例里面在花括号内部调用了printf函数,printf函数与主函数都是函数而printf后面括号内的"Hello World"就是主函数传递给printf函数的值该函数作用就是将双引号内的值打印出来 这也是我们这个实例程序的核心功能 。也与第一行预处理命令呼应没有包含stdio.h就用不了这个printf函数。
最后就是return 0;C标准规定如果函数有返回值那么在函数的末端就要有这个return语句。return后面是等待返回的值;
关于这个返回值我了解的也只有这么多 之后再学习吧。

四、初识数据类型

先举个简单的例子帮助大家理解:要过年了妈妈让我去买10斤排骨那么首先我就要记住去买的东西是排骨,数量是10如果买错了回家可能就要挨骂喽。所以我们的大脑就要有一块位置去记”排骨“,”10“。我们学习编程语言就是为了让计算机帮助我们,那现在这个任务就交给计算机,买过程咱先不谈后续咱们才能构思,首先计算机也要记住这两件事”排骨“,”10“。名字和数量这两个东西说到底就是数据计算机需要把这两个数据存起来,我们存在大脑、计算机存在内存。计算机要存东西首先得在内存开辟空间,排骨是字符、10是数字,是两种不同的数据类型所以计算机就要根据不同数据类型开辟不同的空间,而我们学的数据类型就是做这件事的(在内存中开辟不同类型的空间让我们可以将数据存储进去)

C语言中的数据类型

char   //字符数据类型(可以开辟装单个字符的空间)
short  //短整型(可以开辟装小一点的整数的空间)
int   //整型 (可以开辟装整数的空间)
long  //长整型 (可以开辟装很大的整数的空间)
long long   //更长的整型(可以开辟装比很大还大的整数的空间)
float   //单精度浮点型浮点型(可以开辟装带小数数据的空间)
double  //双精度浮点型(可以开辟装比float里小数精度更大的小数的空间)(就是小数点后位数很多的小数)

以上这些是C语言的基本数据类型

看到这里大家应该知道了为啥会有char int float这种不同的数据类型了,因为描述的数据不同整数、字符、小数。
但是为啥整数型要区分短整型和长整型居然还有更长整型呢?直接弄个最大的出来不管多大整都可以放那多好。
为了解决这个问题就要讲以下这些数据类型在内存中的存储大小了

C语言中数据类型的大小

在这里插入图片描述

这段代码可以将将这些数据类型的大小打印出来,sizeof是一个关键字也是C语言中的一个操作符(后面会讲)作用是计算数据类型或者变量所占存储空间大小。打印出的这些数字的单位是字节(byte)。

插一条计算机中存储单位的知识:计算机中存储最小的单位是 bit(比特位)一个bit能存储一个二进制位(也就是0或1);
在bit之上是byte(字节)一个byte相当于8个bit;
byte之上是kb 一个kb等于1024个byte;
kb之上mb 一个mb是1024个kb;
mb之上是gb、再往上是tb、再往上是pb,这些之间都是1024倍。

这样以下就能看出来这些数据类型的存储大小了。假如说我们想存的数据比较小用short完全够用,如果我们非要用int也可以但是会浪费空间资源这样是很不好的所以就一个整型就分出了 short、int、long、long long。到这里又出现了问题就是为什么long(长整型)和int(整型)一样大呢?这是因为C语言标准规定sizeof(long)>=sizeof(int)就可以了没有规定必须大于,所以当前编译器他们两个打印出来大小显示就一样了。

数据类型的使用

int main()
{
	int a = 10;//开辟一个整型空间并命名为a,将10这个数字放入这个空间。
	printf("%d\n", a); //将名字为a的这块空间内部的数字打印出来
	char sh = 'c'; //开辟一个字符型空间并命名为sh,将这个字符c放入这个空间。
	printf("%c\n", sh);//将名字为sh的这块空间内部的字符打印出来
	return 0;
}

以上就是数据类型的简单使用,实际上数据类型作用就是用来定义变量的。

五、变量与常量

在我们的生活中有很多的值是固定的比如:人的性别,血型,身份证号码等等
反之在也有一些值是不固定的比如:人的年龄,体重,工资,等等
C语言中不变的值就是常量,可以改变的值就是变量。

定义变量的方法

int age = 15;
double weight = 66.6;
char ch = "c";

拿第一行代码举例:int就是我们刚刚学完的数据类型,定义变量首先指定变量的数据类型。age是变量的名字这个是我们自己决定的可以随便取。int age;这样其实就是已经定义好变量了,定义变量格式就是:数据类型+空格+变量名; 那个”=“是赋值符号可以将右边的值赋值给左边,这里就是将150这个值赋值给了age这个变量,就把150这个整型数据存到了int数据类型开辟的名为age的这个变量的空间里面了。变量定义完可以赋值也可以不赋值,但是最好还是赋一个初值。

变量的分类

变量分为两类:局部变量和全局变量。上代码!

int a = 20; //全局变量
int main()
{
	int a = 10; //局部变量
    
	printf("%d\n", a);
	return 0;
}

都不用我说大家应该就发现了全局变量是定义在大括号外面局部变量是定义在大括号里面,局部变量就是定义在打括号内部的变量、全局变量就是定义在大括号外部的。
我们的案例代码中定义了全局变量和局部变量而且他们名字还都是a,那么谁起作用呢?
在这里插入图片描述

打印出来的是10,事实证明局部变量起了作用。大家可能会想会不会是这个打印函数离局部变量近所以局部变量就起作用呢?不是因为远近,是规定的如果全局变量和局部变量名字起了冲突那么局部变量优先。

初识变量的作用域和生命周期

作用域

作用域(scope),程序设计概念,通常来说,一段程序代码中所以用到的名字并不总是有效的/可用的而限定这个名字的可用性的代码范围就是这个名字的作用域。(通俗的说就是我们定义的变量在哪里可以使用哪里就是这个变量的作用域)。

  • 局部变量的作用域就是变量所在的局部范围。(局部变量只能在它定义的那个大括号里面用)
  • 全局变量的作用域是整个工程。(在一个工程里什么地方都能用,所以说还是全局变量权威)
int main()
{
	{
		int a = 10; //局部变量
	}
	printf("%d\n", a);
	return 0;
}

这段代码局部变量定义在大括号里面而printf函数像在外面用用这个变量最终的结果就是编译不通过。
在这里插入图片描述

生命周期

一个人的生命周期就是从出生到死亡。
变量的生命周期:变量的创建和销毁之间的时间段。

  • 局部变量的生命周期:进入局部范围(作用域)生命开始,出局部范围(作用域)生命结束。
  • 全局变量的生命周期:程序的生命周期

常量的种类

常量是不能改变的量分为以下四种

  • 字面常量
  • const修饰的常变量
  • #define定义的标识符常量
  • 枚举常量

字面常量

字面常量是很容易理解的,但是我总觉得写起来又不好表达。举个例子吧就比如”100“这就是给常量,因为它就是数字你无法改变他不能说今天”100“是一百的意思明天就是二十的意思了,再比如‘a’这就是个英文字母它的涵义写法都是是无法改变的。

100;   //整型常量
3.14;   //浮点常量
"abfdj";   //字符串型常量
'w';   //字符型常量

const修饰的常变量

const修饰的变量就变成了”常变量“拥有了常属性(常量属性),”常变量“不能被改变。

在这里插入图片描述

上面这个程序定义了整数型变量a并赋值10,然后又重新赋值将这个变量值改变为100最后打印出来值就是100充分说明了变量可以改变这个事实。
在这里插入图片描述

将上面的程序加以修改,变量a前面加了const进行修饰,然后编译运行不成功下面显示错误,说明现在这个a变量不是一个可以被改变的值。
有的人认为变量被const修饰之后就变成了常量,其实并不是那样。
在这里插入图片描述

以上程序第40行是个数组(暂时还没讲)有一点记住就行中括号内只能放常量,而现在放的是被const修饰的变量编译不通过错误也很明显就是中括号内需要放常量而a并不是常量。所以变量被const修饰后只是获得了常变量属性变得不能被修改,本质上还是一个变量。

define 定义的标识符常量

#define和#include一样第一是预处理命令是在程序编译之前行动的,#define是用来定义符号常量的也就是我们所说的标识符常量。

书写格式:#define 符号常量名 值

#define MAX 100

这段代码协商之后就可以将程序中所有的MAX都替换为100,MAX就成为了标识符常量。
在这里插入图片描述

这样的MAX标识符常量也是不能被修改的,大家可以自己编程测试一下。(学编程一定要多动手实践)

枚举常量

什么是枚举常量?

说到枚举就一定要知道一个关键字“enum”,这个关键字的作用就是可以创建数据类型。对的没错就是咱们上面写到的int,short之类的,只不过上面讲的这些是C语言中本身就有的除了本身就有的数据类型我们也可以自己创建数据类型。而我们创建出来的数据类型作用和之前讲那些是一样的,同样可以开辟空间定义变量。

使用enum的格式是这样的

enum 类型名
{
    常量1,
    常量2,
    常量3....
};

用以上这样的格式就可以创造出数据类型,大家应该也注意到了大括号当中的是常量,这些常量就是”枚举常量“(同样每一个枚举常量的值在初始化时确定之后在程序中是不能被更改的)。用我们创造出来的这个数据类型定义的变量叫做“枚举变量”,这样的变量的取值只能是大括号中常量的其中之一。我们创建的数据类型括号内的常量可以写无数个,在一个类型名下的枚举常量是需要可以被一一列举出来的(就是说这些枚举常量在某范围之内是并列的)。比如说我们想定义个“性别”数据类型那么枚举常量就是男和女如果我们觉得还有别的性别那么也可以写不过我现在就想到这俩,再比如数据类型是日期,那么枚举常量就是周一,周二…一直到周天。下面用代码举个例子!

enum week
{
    mon,
    tue,
    wed,
    thu,
    fir,
    sat,
    sun
};
int main()
{
    enum week t = mon;//t是我们定义的变量名,定义变量时候是enum+数据类型名+变量名
}

我们就可以用week这个数据类型来定义变量了,切记定义出来的枚举变量只能取这些常量的值。

枚举常量的取值

枚举常量的值在初始化之后在程序内就不能改变了,所以说在初始化(赋初值)的时候我们是可以给枚举变量赋值的。
在这里插入图片描述

这样初值就赋好了我们打印出来也能看到,这个初值是我们自己决定的但是只能用int也就是整数型的值。
如果不赋初值是啥样的呢?
在这里插入图片描述

如果给枚举常量赋初值,编译器会自动给第一个常量赋值0,然后以此加1。
(现在对于这个枚举常量我们就先做了解,再往后学就会学到枚举的奥妙)

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值