今天我想来浅谈一下C语言,简单认识一些C语言的基本知识,从而对C语言有一个大概的认识。
本次内容较多,可以根据左边的目录来享用。
一、什么是C语言
C语言是一种人和计算机交流的语言,是一门通用的计算机编程语言,C语言广泛应用于底层开发。
常用编译器有Dve-C++,VS等
二、创建C语言程序
1.创建项目
2.创建.c源文件
3.写代码
4.运行
解析:
- #include <stdio.h>是引头文件
- main函数是程序的入口
- 一个工程有且仅有一个main函数三、数据类型
三、数据类型
在我们的生活中,有各种各样的数据类型,因此C语言作为人与计算机沟通的桥梁,其数据类型自然也是丰富多彩的。
1.以下是C语言的各种数据类型
2.各种数据类型的大小
3.类型的使用
四、变量、常量
1.定义变量
格式:(类型 变量名 = 值;)
2 .变量的命名规则
- 只能由字母(包括大写和小写)、数字和下划线( _ )组成。
- 不能以数字开头。
- 长度不能超过63个字符。
- 变量名中区分大小写的。
- 变量名不能使用关键字
3.变量的分类
全局变量
局部变量
#include <stdio.h>
int global = 2019;//全局变量
int main()
{
int local = 2018;//局部变量
int global = 2020;//局部变量
printf("global = %d\n", global);
return 0;
}
注:当局部变量和全局变量名字冲突的情况下,局部优先。
4.变量的作用域和生命周期
5.常量
C语言中的常量和变量的定义的形式有所差异。
C语言中的常量分为以下以下几种:
-
字面常量
- const 修饰的常变量
- #define 定义的标识符常量
- 枚举常量
#include <stdio.h>
//举例
enum Sex //enum枚举关键字
{
MALE,
FEMALE,
SECRET
};
//括号中的MALE,FEMALE,SECRET是枚举常量
int main()
{
//字面常量演示
3.14;//字面常量
1000;//字面常量
//const 修饰的常变量
const float pai = 3.14f; //这里的pai是const修饰的常变量
pai = 5.14; //是不能直接修改的!
//#define的标识符常量 演示
#define MAX 100
printf("max = %d\n", MAX);
//枚举常量演示
printf("%d\n", MALE); //0
printf("%d\n", FEMALE); //1
printf("%d\n", SECRET); //2
//注:枚举常量的默认是从0开始,依次向下递增1的。若赋初始值,则从所赋值的开始
return 0;
}
注:上面例子上的 pai 被称为 const 修饰的常变量, const 修饰的常变量在C语言中只是在语法层面限制了 变量 pai 不能直接被改变,但是 pai 本质上还是一个变量的,所以叫常变量。
四、字符串+转译字符+注释
1.字符串
'a' //字符a,用单引号
"abc" //字符串abc,用双引号
注:字符串在结尾的位置隐藏了一个 \0 的字符。
字符串的结束标志是一个 \0 的转义字符。
在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
打印是遇到\0才停止打印。
我们通过程序来直观感受一下上面三点
2.转义字符
顾名思义,转义就是改变原来的意思
我们通过程序来体会一下
由上面的程序可以,代码中的\t打印出来的结果不是\t,取而代之的是一段空格,说明了\t的意义改变了。那么在C语言中有哪些转义字符呢?
以下是C语言的转义字符,看了之后,希望各位可以通过上机来体会其中各个字符的意思。
3.注释
在我们平常写代码的时候,遇到不需要的代码的时候,我们可以删掉他,也可以将其注释掉。程序运行的过程中。是不会编译注释的内容的 ,所以在写一下复杂难懂的代码时,可以写注释(相当于做笔记),便于日后理解。
注释有两种风格
- C语言风格的注释 /*xxxxxx*/ 缺陷:不能嵌套注释
- C++风格的注释 //xxxxxxxx 可以注释一行也可以注释多行
#include <stdio.h>
int Add(int x, int y)
{
return x+y;
}
/*C语言风格注释
int Sub(int x, int y)
{
return x-y;
}
*/
int main()
{
//C++注释风格
//int a = 10;
//调用Add函数,完成加法
printf("%d\n", Add(1, 2));
return 0;
}
五、选择语句
这次我们先介绍一个if语句
if语句格式
if(表达式) 表达式的作用是作为一个条件判断,符合条件,执行语句1;否则执行语句2.
语句1;
else
语句2;
我们来看代码
#include <stdio.h>
int main()
{
int coding = 0;
printf("你会好好学习吗?(选择1 or 0):>");
scanf("%d", &coding);
if(coding == 1)
{
prinf("会,你会有好结果\n");
}
else
{
printf("放弃,回家卖红薯\n");
}
return 0;
}
六、循环语句
这次我们也只介绍一个while语句
首先,我们来看看while语句的结构
while语句的一般表达式
while(表达式)
循环体语句;
这里的表达式作为一个条件判断,判断是否要执行循环体。
若条件成立,则执行语句体。反之跳出循环体
//while循环的实例
#include <stdio.h>
int main()
{
printf("加入比特\n");
int line = 0;
while(line<=20000)
{
line++;
printf("我要继续努力敲代码\n");
}
if(line>20000)
printf("好offer\n");
return 0;
七、函数
函数体的结构
返回值类型 (类型 变量)
{
函数体语句;
}
看看代码
题目:写一个函数求两个整数的较大值
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int MAX(int x, int y) //函数
{
if(x > y)
return x;
else
return y;
}
int main()
{
int num1 = 10;
int num2 = 20;
scanf("%d %d", &num1, &num2);
int max = MAX(num1, num2);
printf("max = %d\n", max);
return 0;
}
八、数组
一堆相同元素的元素储存在一起,叫数组
1.定义数组
int arr [10] = {1,2,3,4,5,6,7,8,9,10};
数据类型 数组名 [元素的个数] = {数组里面的元素};
//定义一个整形数组,最多放10个元素
2.数组的下标
C语言规定:数组的每个元素都有一个下标,下标是从0开始的。
数组可以通过下标来访问的 。
比如:
int arr[10] = {0}; //如果数组10个元素,下标的范围是0-9
3.数组的使用
我们来看代码
#include <stdio.h>
int main()
{
int i = 0;
int arr[10] = {1,2,3,4,5,6,7,8,9,10}; //定义数组
for(i=0; i<10; i++)
{
printf("%d ", arr[i]); //通过下标来访问各个数组,然后和输出数组各个元素,
} //若想打印数组内的所以元素,一般搭配循环语句来实现
printf("\n");
return 0;
}
九、操作符
简单介绍为主
- 算术操作符
+ - * / %
加 减 乘 除 取余
- 移位操作符(移动的是二进制位)
>> <<
- 位操作符
& ^ |
- 赋值操作符
= += -= *= /= &= ^= |= >>= <<=
- 单目操作符
- 关系操作符
- 逻辑操作符
- 条件操作符
exp1 ? exp2 : exp3
三目运算符:
m = (a > b ? a : b);
等价于:
if (a > b)
m = a;
else
m = b;
- 逗号表达式
exp1, exp2, exp3, …expN
逗号表达式:结果是最后一个表达式的结果,但也要从左往右依次算起,不可跳过某一个表示式进行运算
int main()
{
int a = 3;
int b = 5;
int c = 0;
int d = (a+=3,b-=a,c=a+b,c-2);
// 6 -1 5 3
printf("%d\n", d); //打印的结果:3
return 0;
}
- 下标引用、函数调用和结构成员
[] () . ->
十、关键字
C语言为我们提供了丰富的关键字,这些关键字都是语言本身预先设定好的,用户自己是不能创造关键字的。在平时写代码定义变量的时候,不能把关键字作为变量名。
下面我来简单介绍两个关键字:
1.关键字 typedef
typedef 顾名思义是类型定义,这里应该理解为类型重命名。
意思是将类型名重新命名,写代码的时候就可以将新名字替换掉旧名字,在以后的工程中会有极大妙用!
//将unsigned int 重命名为uint_32, 所以uint_32也是一个类型名
typedef unsigned int uint_32;
int main()
{
//观察num1和num2,这两个变量的类型是一样的
unsigned int num1 = 0;
uint_32 num2 = 0;
return 0;
}
2.关键字static
在C语言中:
static是用来修饰变量和函数的
1. 修饰局部变量-称为静态局部变量
2. 修饰全局变量-称为静态全局变量
3. 修饰函数-称为静态函数
a. static修饰局部变量
#include <stdio.h>
void add();
void add()
{
int a = 1;
static int b = 1; //static 修饰
a++;
b++;
printf("%d ", a); // 输出的结果:2 2 2 2 2
printf("%d ", b); // 输出的结果:2 3 4 5 6
}
int main()
{
int i = 0;
while (i < 5)
{
add();
i++;
}
return 0;
}
分析:
- static修饰局部变量(改变了局部变量的生命周期)本质上改变了变量的存储类型,储存类型由栈区变成静态区,使得该变量的生命周期变长,直到程序结束,该变量的生命周期才结束。
- static修饰局部变量,影响的是生命周期,不影响作用域。
b.static修饰全局变量
分析:
全局变量具有外部链接属性,所以本源文件可以调用其他源文件的全局变量。
当static修饰全局变量后,该全局变量由外部链接属性变成了内部链接属性,此时全局变量只能在自己所在的.c文件中使用,其他.c文件无法链接使用,不能用extern调用。
因此,static修饰全局变量是改变全局变量的作用域。
c.tatic修饰函数
分析:
函数具有外部链接属性,所以本源文件可以调用其他源文件的函数。
当static修饰函数后,该函数(Add)由外部链接属性变成了内部链接属性,此时函数(Add)只能在自己所在的.c文件中使用,其他.c文件无法链接使用,不能用extern调用。
因此,static修饰函数是改变函数的作用域。
小结:
在本次的浅谈C语言中,讨论了很多的知识点,但是都是浅尝辄止,目的是为了了解一下C语言,也希望各位C语言初学者可以多多练习,巩固知识。同时也算我这3天学习C语言的一个小小总结,还有其他知识,待我们日后交流。感谢各位读者的观看,若内容写得不好,请多多指正,让我们一起进步!!