C语言是一门计算机编程语言,广泛应用于底层开发。C语言跟汉语英语一样,不过他不是人类的语言,而是计算机的语言,在我们刚刚接触到编程的时候可能都会写这样一段代码:
#include<stdio.h>
int main()
{
printf("Hello World!\n");
return 0;
}
这就是一段最简单的代码,我们从中可以看出,它有头文件、主函数、库函数、数据类型、关键字等等,那么C语言中具体有哪些语法规则呢?
数据类型
计算机就是用来存储各种各样的数据的,所以首先就要有数据类型的定义
类型符号 | 类型名称 | 类型大小(字节) |
---|---|---|
char | 字符型 | 1byte |
short | 短整型 | 2byte |
int | 整型 | 4byte |
long | 长整型 | (32位)4byte或(64位)8byte |
long long | 更长的整形 | 8byte |
float | 单精度浮点型 | 4byte |
double | 双精度浮点型 | 8byte |
以上表中就是C语言中所有的数据类型,我们可以清楚的看到它们的大小,计算机中的存储单元从小到大分别是:bit、byte、kb、mb、gb、tb、pb……
而这些数据类型是用来定义变量、常量或函数的
变量、常量
变量
变量,顾名思义,就是可以随时改变值的一个量,比如数学中的变量x,比如生活中的身高、年龄等等;
定义一个变量很简单:数据类型 变量名称 = 初始值;
int age = 22;
float height = 183.3;
char ch = 'a';
这样一个变量就定义好了,此外变量还分为局部变量和全局变量之分
局部变量:定义在一对大括号中的最前面(C语言语法规定);作用域就是此大括号;生命周期也是此大括号内,结束即消亡;
全局变量:定义在大括号之外的变量;作用域为整个工程;生命周期为整个程序;
当你想在一个工程的不同项引用全局变量时,只需要
extern 类型 名称;
常量
常量,也就是不能随意改变的量,不如你的性别,你的身份证号等等
C语言的常量分别有一下几种:
1、字面常量
2、const修饰的常变量
3、#define定义的标识符常量
4、枚举常量:
其定义形式为:
#define MAX 10000 //标识符常量
enum Sex //枚举常量
{
MALE,
FEMALE,
SECRET
};
int main()
{
3.14; //字面常量
const float pi = 3.14f; //const修饰的常变量
return 0;
}
字符串、转义字符
字符串
说完了数字,一些不能由数字代表的当然是由字符和字符串来进行表示了,字符串的表示形式是用双引号引起来的一串字符,比如:
“hello world”
“123456”
这里一定要注意一个问题,那就是所有字符串的结束标志都要有一个\0,但是计算字符串长度的时候不会算\0,也不算作字符串的内容,在编写代码的过程中,也应该特别注意这个问题:
char arr[] = "hello"; //正确
char arr[] = {'h', 'e', 'l', 'l', 'o'}; //错误
char arr[] = {'h', 'e', 'l', 'l', 'o', '\0'}; //正确
转义字符
转义字符的意思,就是将字符原有的意思进行转换,变成另外一个意思
转义字符 | 释义 |
---|---|
\? | 在书写连续多个问号时使用,防止被解析成三字母词 |
\’ | 用于表示字符常量’ |
\" | 用于表示一个字符串内部的双引号 |
\\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行符 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制数字 |
\xdd | dd表示2个十六进制数字 |
选择语句
搞清楚了C语言的类型定义,下面我们来看一下C语言的语法,首先是选择语句,也就是我们常说的if/else语句,语法很简单,判断条件如果为真就执行语句1,否则执行语句2
其流程图为:
代码形式为:
if (表达式)
{
……;
}
else (表达式)
{
……;
}
循环语句
C语言中有三种循环语句的表达方式
while语句
do...while语句
for语句
while语句
while语句是只要条件为真,就会一直循环while语句中的表达式
其流程图为:
代码表现形式为:
while (循环条件)
{
……;
}
do…while语句
do…while语句与while语句很相似,唯一的差别是do…while语句先进行了一次循环之后再判断
其代码表现如下:
do
{
……;
}while (循环条件);
for语句
for语句与其他循环语句也是类似的,不过for语句是将初始化语句、 条件语句、控制语句都合在一起
其流程图:
其代码表现如下:
for (初始化语句; 条件语句; 控制语句)
{
……;
}
数组
数组就是一组相同数据类型的元素的集合,是为了方便数据存储的一种存储形式,其定义如下:
int arr[] = {0, 1, 2, 3};
可以改变数据类型来定义不同数据类型的数组
函数
函数的特点是代码简化,代码复用,其定义为:
数据类型 函数名(传入参数)
{
……;
}
操作符
1.算术操作符:+ - * / %
2.移位操作符:<< >>
3.位操作符:
操作符 | 名称 | 效果(二进制) |
---|---|---|
& | 按位与 | 同1为1,其余为0 |
^ | 按位或 | 有1为1,其余为0 |
| | 按位异或 | 相异为1,相同为0 |
4.赋值操作符:= += -= *= /= &= ^= |= <<= >>=
5.单目操作符:
操作符 | 名称 |
---|---|
! | 逻辑反操作 |
- | 负值 |
+ | 正值 |
& | 取地址 |
sizeof | 操作数的类型长度(以字节为单位) |
~ | 对一个二进制数按位取反 |
- - | 前置、后置- - |
++ | 前置、后置++ |
* | 解引用操作 |
(类型) | 强制类型转换 |
6.关系操作符:> >= < <= != ==
7.逻辑操作符:&& ||
8.条件操作符:exp1?exp2:exp3
9.逗号表达式:exp1, exp2, exp3, ……, expn
10.下标引用、函数调用和结构成员:[] () . ->
常见关键字
typedef
类型重命名,在数据结构中很常见
typedef 类型名 重命名
static
用于修饰变量及函数的
1.静态局部变量:修饰局部变量的,改变其生命周期
2.静态全局变量:修饰全局变量的,改变作用域(链接属性(外->内))
3.静态函数:修饰函数的,改变作用域(链接属性(外->内))
#define定义常量和宏
//define定义标识符常量
#define MAX 1000
//define定义宏,效果同加法函数
#define ADD(x, y) ((x)+(y))
指针
指针可以说是C语言中最为重要的一个内容了,在计算机中,会将内存划分为一个一个小的内存单元,每一个大小为1字节,而为了有效访问到每个内存单元,就给每个内存单元进行了编号,即为内存单元地址;任何一个值都会有相应的存储空间,所以也就会有相应的地址,这个地址也就会指向相应的内存单元,形象化理解即为——指针
下面是一个使用指针的例子:
int a = 10;
int *p;
p = &a;
其中p为一个整型的指针变量,p为变量a的地址,*p指向a的值
结构体
在生活中总会存在一些复杂的对象是C语言不能够定义的,所以这种情况下,C语言提供给了我们使用者自行定义的权利,这就是结构体
比如描述一个学生:有姓名、年龄、性别、学号
其结构体定义就位:
struct Stu
{
char name[20];//名字
int age; //年龄
char sex[5]; //性别
char id[15] //学号
};
结构体初始化:
struct Stu s = {"张三", 20, "男", "20180606"};
//.访问结构体成员
s.name, s.age, s.sex, s.id
//->访问结构体成员
struct Stu *p = &s;
p->name, p->age, p->sex, p->id
以上为C语言基本的一些语法结构和规则