前言
小伙伴们大家好,今天开始,我们即将开启c语言的正是学习,从初级到进阶,想必大家都听说过c生万物,可想而知c语言对于我们程序员的重要之处,从此篇博客开始将持续更新c语言的相关知识,让我们开始系统的学习吧!我们的初识c语言是基本了解C语言的基础知识,对C语言有一个大概的认识。 每个知识点就是简单认识,不做详细讲解,后期都会细讲。这样后期学习起来会更容易接收,我的风格是将各种知识点以题的方式讲解,使抽象得概念化为具体的应用
特别说明:我们这篇博客只是现代大家简单的认识c语言的知识,不会深入讲解,等初识c语言后面,每一个知识点都会深入讲解
1.什么是c语言
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易 的方式编译、处理低级存储器、产 生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。 其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。我使用的VS编译器,大家可以自行去官网下载
2.第一个C语言程序
一个先插曲
零基础的小伙伴可能会想hello,world我用qq,微信也能敲出来啊,你这么写有什么用呢,其实则不然,你有没有想过你为什么能用qq微信敲出来呢,其实代码写hello,world就是一个软件底层对终端的控制,正是因为这些代码的实现,才能有我们日常软件功能的实现
这是基本的程序框架,后续有什么代码继续丰富就行了,也就是说写代码先写上这个框架
#include<stdio.h>
int main()
{
return 0;
}
代码解释:
main函数是程序的入口 ,一个工程中main函数有且仅有一个,c语言执行打印函数printf(库函数)如果使用库函数必须引用头文件#include<stdio.h>,
%d打印整型,%c打印字符型,%f打印浮点型数,%lf答应双精度浮点数
%s打印字符串,%p以地址形式打印,%x打印16进制数
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
printf("hello,world\n");
return 0;
}
可能有的小伙伴,代码执行正确,单数并没有弹出控制台的输出框,那就看看怎么设置吧
特别说明,这句话#define _CRT_SECURE_NO_WARNINGS 1,这句话是为了避免VS编译器报错,因为当我们使用scanf时VS认为scanf不安全,建议我们使用VS编译器自己的scanf_s,scanf是C语言自己提供的,我们肯定得按着C语言的语法要求来,所以在源文件第一行加上这句话#define _CRT_SECURE_NO_WARNINGS 1,使scanf在VS合法
3.数据类型
char //字符数据类型 1字节
short //短整型 2字节
int //整形 4字节
long //长整型 4字节
long long //更长的整形 8字节
float //单精度浮点数 4字节
double //双精度浮点数 8字节
注意:存在这么多的类型,其实是为了更加丰富的表达生活中的各种值。
int main()
{
printf("%d\n", sizeof(char));
printf("%d\n", sizeof(short));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long));
printf("%d\n", sizeof(long long));
printf("%d\n", sizeof(float));
printf("%d\n", sizeof(double));
printf("%d\n", sizeof(long double));
return 0;
}
计算机中的单位:
bit-比特位
byte-字节= 8bit kb- 1024byte mb- 1024 kb gb- 1024 mb
tb- 1024gb pb- 1024tb
3.1类型的使用:
只是适当举例
char ch = 'w';
int weight = 120;
int salary = 20000;
4.变量和常量
生活中的一些数据: 有些数据不能变:血型,性别,圆周率
有些数据一定可变:工资,年龄,体重
不变的值,C语言中用常量的概念来表示,变得值C语言中用变量来表示。
4.1变量
int age = 150;
float weight = 45.5f;
char ch = 'w';
4.2 变量的分类
局部变量 全局变量
二者有很大的区别,但是简单来说,全局变量,定义在代码块({})之外的变量,局部变量,定义在代码块内部的变量
4.2.1变量的作用域和生命周期
4.2.1.1作用域
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用 的 而限定这个名字的可用性的代码范围就是这个名字的作用域。
局部变量的作用域是变量所在的局部范围。
全局变量的作用域是整个工程。
4.2.1.2生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
- 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
- 全局变量的生命周期是:整个程序的生命周期。
- 字符串+转义字符+注释
#include <stdio.h>
int global = 2019;//全局变量
int main()
{
int local = 2018;//局部变量
//下面定义的global会不会有问题?
int global = 2020;//局部变量
printf("global = %d\n", global);
return 0;
}
上面的局部变量global变量的定义其实没有什么问题的! 当局部变量和全局变量同名的时候,局部变量优先使用,但是局部变量和全局变量不要相同容易产生bug
4.2.2变量的使用
scanf是一个输入函数,例scanf("%d%d", &num1, &num2); %d为输入数据得类型,&num1为接收数据的变量,&取地址符,简单理解就是取出变量
int main()//主函数,程序的入口,有且仅有一个
{
int num1 = 0;
int num2 = 0;
int sum = 0;//c语言规定变量要定义在当前代码块的最前面
scanf("%d%d", &num1, &num2);
sum = num1 + num2;
printf("sum=%d\n", sum);
return 0;
}
4.3常量
C语言中的常量和变量的定义的形式有所差异。
C语言中的常量分为以下以下几种:
字面常量 const 修饰的常变量 #define 定义的标识符常量 枚举常量
4.3.1 const 修饰的常变量
const可以将n锁值,使之不能改变否则报错,例子上的 n被称为 const 修饰的常变量, const 修饰的常变量在C语言中只是在语法层面限制了 变量n 不能直接被改变,但是n本质上还是一个变量的,所以叫常变量。
int main()
{
const int n = 10;//const可以将n锁值,使之不能改变否则报错
n = 9;//这里报错
return 0;
}
4.3.2#define 定义的标识符常量
这里只是简单介绍,#define其实起到替换作用将出现MAX得地方替换成10,后面会详细讲解
#include<stdio.h>
#define MAX 10
int main()
{
int arr[MAX] = {0};
printf("%d\n", MAX);
return 0;
}
4.3.3枚举常量
枚举概念复杂,我们只是简单了解有枚举常量而已,关于枚举的只是后面会系统的讲解, //注:枚举常量的默认是从0开始,依次向下递增1的
#include <stdio.h>
enum sex//枚举
{
//MALE,FEMALE,SECRET是枚举常量
male,
female,
secret
};
int main()
{
//enum sex s = male;
printf("%d\n", male);
printf("%d\n", female);
printf("%d\n", secret);
return 0;
}
5.字符串+转义字符+注释
5.1字符串
注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串 内容。\0得值就是0
因为arr2没遇到‘\0’,即没有遇到结束标志,就会一直输出,而"bit"中隐藏了一个\0,所以会自动结束
#include <stdio.h>
int main()
{
char arr1[] = "bit";
char arr2[] = {'b', 'i', 't'};
char arr3[] = {'b', 'i', 't', '\0'};
printf("%s\n", arr1);
printf("%s\n", arr2);
printf("%s\n", arr3);
return 0;
}
5.2 转义字符
假如我们要在屏幕上打印一个目录: c:\code\test.c 我们该如何写代码?
#include <stdio.h>
int main()
{
printf("c:\code\test.c\n");
return 0;
}
实际上程序运行的结果是这样的:
这里就不得不提一下转义字符了。转义字符顾名思义就是转变意思。 下面看一些转义字符。
面试题
strlen需要引用头文件#include<string.h>
\62被解析成一个转义字符,代表两个8进制位,需要转换成十进制对应的ascill码值对应的字符62(8进制)-->50(10进制)--->字符'2'
然后再数就是14
#include <stdio.h>
#include <string.h>
int main()
{
printf("%d\n", strlen("abcdef"));//6
// \62被解析成一个转义字符
printf("%d\n", strlen("c:\test\628\test.c"));
return 0;
}
我的这张ascill码标太糊了哈哈哈,还是自己去网上找吧
5.3注释
1. 代码中有不需要的代码可以直接删除,也可以注释掉
- 代码中有些代码比较难懂,可以加一下注释文字注释有两种风格:
- C语言风格的注释 /*xxxxxx*/
- 缺陷:不能嵌套注释
- C++风格的注释 //xxxxxxxx
- 可以注释一行也可以注释多行