提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
前言
一、C语言是什么
二、 第一个C语言程序。
三、数据类型。
四、变量、常量。
五、字符串、转义字符、注释。
六、选择语句。
七、循环语句。
八、函数。
九、数组
十、操作符。
十一、关键字。
十二、#define 定义常量和宏
十三、指针
十四、结构体。
前言
我大概地了解一下c语言的内容,新手小白总结一下,都是些简单的个人认识,记录自己学习。
一、C语言是什么
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易 的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语 言。 尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的 C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超 级电脑等作业平台。 二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制 定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。 [1] 目前2011年12月8 日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标 准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉 字编程。 C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。 其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
二、 第一个C语言程序。
第一个c语言程序。
#includeint main() { printf("Hello world!"); return 0; }
三、数据类型。
可以用sizeof()运算符,计算数据类型大小,单位是字节。
四、变量、常量。
1.变量。
1.1 说明:变量即是可变的值。
1.2 定义变量的方法:数据类型+变量名。
1.3 变量的命名:只能由字母(包括大写和小写)、数字和下划线( _ )组成。 不能以数字开头。 长度不能超过63个字符。 变量名中区分大小写的。 变量名不能使用关键字。
1.4 变量的分类: 局部变量 和全局变量。(及其生命周期和作用域。)
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用 的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
局部变量的作用域是变量所在的局部范围。 全局变量的作用域是整个工程。
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段, 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。 全局变量的生命周期是:整个程序的生命周期。
2.常量。
1.1说明:即是不会改变其值。
1.2分类:有字面常量、 const 修饰的常变量、 #define 定义的标识符常量、 枚举常量这几种。
字面常量:即平时看到的那些常量。例如:1,2,3,3.14,这些。
const修饰的常变量:其本质是变量,它的值不可以被改变。
#define 定义的标识符常量:本质上是常量,但用一个标识符来方便表示。
枚举常量:enum 枚举类型名{常量1,常量2,常量3,.......};枚举类型默认枚举值从0开始,(0,1,2,3,...这样),也可以修改其中的值。
enum 枚举类型名+枚举变量名。(此变量只有上面常量1,常量2,...几种取值。默认为int型。)
五、字符串、转义字符、注释。
1.字符串:由双引号“ ”引起来的一串字符称为字符串。 (字符串的结束标志是一个 的转义字符。在计算字符串长度的时候 是结束标志,不算作字符串 内容)。
2.转义字符:转义字符顾名思义就是转变意思
3.注释:( 当写代码中有些代码比较难懂时,可以加一下注释文字)
注释有两种风格: C语言风格的注释 (缺陷:不能嵌套注释,即注释里面不能再用注释。)可以注释多行。
C++风格的注释 //xxxxxxxx ,只能注释单行。
六、选择语句。
1.if语句:
if(表达式)
语句
else(可以没有)
语句
其中表达式的括号是必须的。
if语句是先计算圆括号内表达式的值,如果表达式的值非零(即是包括正负),则结果为真,执行圆括号后面的语句,表达式的值为0,则假,执行else后的语句。
也可以在其中嵌套多个if语句。
2.switch语句:
switch(表达式)(表达式结果需为整型或字符型)
{
case(case为情况标号) 常量表达式
语句; break;(break是用来跳出switch语句,或循环语句,去执行下一个语句的语句)
case 常量表达式
语句 break
...
default
语句
}
switch语句是把表达式里的值与多个case的值比较后,执行相应的语句。default后的语句是表达式的值没有与case匹配的情况时,执行的语句。
(可以多个case情况执行相同的语句,但是不能有重复的情况标号,即不可以多个case后的常量值相同。
不一定得有default。)
七、循环语句。
1.while语句:
while(表达式)
语句
其中表达式是循环条件,语句为循环体。
while语句是:计算表达式的值,当值为真(非0)时, 执行循环体语句。
2.do while语句:
do{
语句
}while(表达式);
do-while与while的不同在于:它会先执行语句,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。所以,do-while 循环至少要执行一次语句。
3.for语句:
for(表达式1; 表达式2; 表达式3)
语句
for的执行过程:
3.1.先执行表达式1。
3.2.执行表达式2,若其值为真(非0),则执行for语句中的循环体,若其值为假(0),则结束循环。
3.3.执行表达式3。(注意,是执行表达式2判断真假后,执行的是循环体,然后才到表达式3,之前一直搞错了,以为是表达式2到表达式3的。)
3.4.转回上面第2)步继续执行。
3.5.循环结束,执行for语句下面的一个语句。
八、函数。
1.函数包括两种:一种是编译系统提供的库函数,在使用时必须包含对应的头文件。另一种是自己定义的函数。(函数被调用,以实现某种功能。)
2.函数的定义:
返回类型 函数名 (数据类型+参数1(形式参数),类型参数2,…)
{
函数体
}
3.函数的声明和调用:
3.1.声明(即告诉编译器有这个函数存在):代码由上到下依次执行,原则上函数定义要出现在函数调用之前,否则就会报错。但在实际开发中,经常会在函数定义之前使用它们,这个时候就需要提前声明。
函数声明的格式:相当于去掉函数定义中的函数体(也可以不写形参,只写数据类型),并在最后加上分号;
3.2.调用:
函数名(实参1,实参2,...);(实际参数需要与形式参数对应。)
用return语句返回所需要的变量值。
九、数组
1.数组概念:相同类型数据的集合。(包括一维或二维,多维数组。)
2.定义(以一维数组为例):数据类型+数组名[常量表达式](这里的常量表达式是数组的长度)。
3.初始化:通过将数组元素的初值依次放在一对花括号中,数据用逗号隔开,称为初始化列表。
可以只给一部分元素赋值,其它自动为0。
4.引用:数组名[下标](下标从0开始)。
十、操作符。
操作符包括算术操作符,移位操作符,位操作符,赋值操作符,单目操作符,关系操作符,逻辑操作符,条件操作符,逗号表达式,下标引用、函数调用和结构成员。
1.算术操作符:+ - * / %(百分号是求模)
2.移位操作符:>> <<(左移,右移符。)(整数在内存中存的是二进制补码)
3.位操作符:& ^ |
4.赋值操作符:= += -= *= /= &= ^= |= >>= <<=
5.单目操作符:!(非) - + & (地址) sizeof ( 操作数的类型长度(以字节为单位)) ~( 对一个数的二进制按位取反) -- (前置、后置--) ++ (前置、后置++ ) * 间接访问操作符(解引用操作符) (类型)强制转换类型
6.关系操作符:> >= < <= != ==
7.逻辑操作符:&&(与) ||(或)
8.条件操作符:表达式1 ? 2 : 3(判断语句1真假,真则执行语句2,假则执行语句3)
9.逗号表达式:表达式1,2 ,3 ,....(即用逗号隔开的多个表达式。从左向右依次执行。整个表达式的结果是最右边表达式的结果。中间表达式中改变的值也会保存,但是这个逗号表达式的整个结果是最右的表达式的结果)
10.下标引用,函数调用和结构成员:[] () . ->
十一、关键字。
有:auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while等。
关键字都是语言本身预先设定好的,用户自己是不能创造关键字的。(也不能够用这些关键字命名变量。)
十二、#define 定义常量和宏
1.#define 定义标识符常量(前面提到的)
2. #define 来定义宏。
格式:#define 宏名 字符串
宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,字符串中可以含任何字符,它可以是常数、表达式、if 语句、函数等,预处理程序对它不作任何检查。(说明1标识符常量也是宏的一种,即字符串是一个数。)
字符串是函数(带有参数时)
格式:#define 宏名(形参列表) 字符串
(在字符串中可以含有各个形参。形参之间可以出现空格,但是宏名和形参列表之间不能有空格出现。这里不会为形式参数分配内存,因此不必指明数据类型。而在宏调用中,实参包含了具体的数据,要用它们去替换形参,因此实参必须要指明数据类型。这一点和函数是不同的:在函数中,形参和实参是两个不同的变量,都有自己的作用域,调用时要把实参的值传递给形参,有值的传递;而在带参数的宏中,只是被相应字符串的替换,不存在值传递的问题。在宏定义中,字符串内的形参通常要用括号括起来以避免出错。使用时与函数差不多,但没有数据的返回类型。)
十三、指针
1.内存和地址:在计算机中,数据是存放在内存单元中的,一般把内存中的一个字节称为一个内存单元。为了更方便地访问这些内存单元,可预先给内存中的所有内存单元进行地址编号,根据地址编号,可准确找到其对应的内存单元。由于每一个地址编号均对应一个内存单元,因此可以形象地说一个地址编号就指向一个内存单元。C 语言中把地址形象地称作指针。C语言中的每个变量均对应内存中的一块内存空间,而内存中每个内存单元均是有地址编号的。在 C 语言中,可以使用运算符 & 求某个变量的地址。
2.指针变量(用来存放指针的,即存放地址。)
定义形式:
类型 * 指针变量名;(类型指的是这个指针变量存放的相应类型变量的地址,叫基类型)
*符号表示该变量为指针类型(所以指针变量不包括*符号)。赋值时要用地址符&。赋值后,指针变量即存放了相应变量的地址,* 符号+指针变量即可间接通过地址访问该变量。
如
#includeint main() { int a = 666, * p; p = &a; printf("%d", *p); return 0; }
输出为a的值666。
十四、结构体。
1.概念:与数组不同,数组是相同类型数据的集合。而结构体是一组不同类型的数据的集合。
2.结构体的定义形式为:
struct 结构体名{
结构体所包含的变量或数组(叫结构体的成员)
};(要注意大括号后面的分号;不能少,这是一条完整的语句。)
例如:
struct stu{
char *name; //姓名
int num; //学号
int age; //年龄
char group; //所在学习小组
float score; //成绩
};
3.定义变量:
结构体是一种数据类型,用它来定义变量。例如:
struct stu stu1, stu2;关键词struct不能省略。
stu={ 数据, , , ,}(数据顺序与结构体中一一对应。)
4.获取结构体成员的一般格式为(用.符号):
结构体变量名.成员名;
如
#includeint main(){ struct{ char *name; //姓名 int num; //学号 int age; //年龄 char group; //所在小组 float score; //成绩 } stu1; //给结构体成员赋值 stu1.name = "Tom"; stu1.num = 12; stu1.age = 18; stu1.group = 'A'; stu1.score = 136.5; //读取结构体成员的值 printf("%s的学号是%d,年龄是%d,在%c组,今年的成绩是%.1f!n", stu1.name, stu1.num, stu1.age, stu1.group, stu1.score); return 0; }



