初识C语言
前言
本人是一位小萌新,初次学习c语言。如有错误的地方,恳请批评指正!
1. 什么是C语言?
C语言是一门通用计算机编程语言,广泛应用于底层开发
。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
什么是底层开发呢?
简单概括来讲,底层和应用层是一个相对立的概念,底层的比较靠近计算机硬件,而应用层更靠近人类思想,更加抽象和具体。从计算机硬件往上依次还有驱动层、操作系统、应用软件、再就是用户层。如下图:
2. 第一个C语言程序
2.1 如何写代码
哈哈~ 开个玩笑让我们进入正题!
//标准写法格式
#include <stdio.h> // #include 是预处理指令的意思
//stdio.h中 std 是标准的意思
//i代表的是input 输入的意思
//o代表的是output输出的意思 结合起来是标准输入输出的意思也叫做头文件。
int main() //int是整型的意思 main()是主函数的意思,也是主程序的入口。
//这里要注意的是 main函数必须要有,并且在一个项目中main函数有且只有一个!
{
//两个花括号和其中的代码 这一部分叫做函数体
printf("hello world"); //printf 是print function 打印函数
return 0; //返回整型的意思,return是返回的意思
//0代表整型和main()函数前面的int相呼应。
}
2.2 运行代码
输入代码接下来我们就可以按Ctrl+F5(开始执行不调试)运行代码。(编译 - 链接 - 运行)得到以下输出结果:
这样我们第一个代码就完成啦!你的电脑就开始向这个世界问好了!恭喜你!
3. 数据类型
在C语言中有多种数据类型,例如:
3.1 为什么出现这么多类型?
在我们日常生活中想表达一些东西的值 ,那就需要有数据类型,比如年龄是整数、体重是小数、身高也小数。存在这么多的类型,其实是为了更加丰富的表达生活中的各种值。
3.2 如何使用数据类型
使用方法如下:
#include <stdio.h>
int main()
{
char ch = 'a'; //字符'a' ch是变量名 将字符类型的值赋给ch
int age = 20; //年龄是整数20 age是变量名 将整型类型的值赋给age
float weight = 64.7 //体重是小数64.7 weight是变量名
//将单精度浮点型的值赋给weight
double Π = 3.1415926; //圆周率也是更长的小数3.1415926 Π是变量名
//将双精度浮点型的值赋给Π
return 0;
}
3.3 数据类型的大小
首先我们需要了解计算机储存空间大小的基本单位:
bit:比特位 ,计算机最小单位 ,存储一个二进制位
Byte:字节 ,计算机的最小存储单元 ,一个字节存放8个比特位
1KB = 1024Byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
在C语言中,我们计算一个类型创建的变量所占空间的大小,使用单目操作符sizeof
(以字节为单位)。
#include <stdio.h>
int main()
{
printf("%d\n", sizeof(char)); //%d是格式控制符 以十进制有符号的形式输出
//\n是转义字符换行的意思
printf("%d\n", sizeof(short)); //sizeof后面()不能省略掉 但是变量名可以
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));
return 0;
}
输入代码让我们运行起来!
可以看到各种类型的大小分别是:
char所占空间是1个字节 short所占空间是2个字节 int是所占空间4个字节 long所占空间是4个字节 long long所占空间是8个字节 float 所占空间是4个字节 double所占空间是8个字节
注意:sizeof操作符 计算变量/类型的大小,单位是字节。
C语言标准规定:sizeof(long) >= sizeof(int),所以在不同的编译器下sizeof(long)的值是不一样的,只要保证sizeof(long)>=sizeof(int)即可。
4. 变量、常量
在我们生活当中的有些值是不变的(比如:圆周率,性别,血型等等)。
有些值是可变的(比如:年龄,体重,薪资)。
会变的值,C语言中用变量的概念来表示。不变的值,C语言中用常量的概念来表示常量。
4.1 定义变量的方法
#include <stdio.h>
int main()
{
int age = 150;
age=155; //变量可以修改
float weight = 45.5f;
char ch = 'a';
int variate =0; //创建一个变量
int variate =0; //推荐写法:数据类型 变量名 = 0 ;
int variate; //不推荐写法:数据类型 变量名
return 0;
}
4.2 变量的命名
- 只能由字母(包括大写和小写)、数字和下划线( _ )组成。
- 不能以数字开头。
- 长度不能超过63个字符。
- 变量名中区分大小写的。
- 变量名不能使用关键字。
4.3 全局变量和局部变量
#include <stdio.h>
int global = 0; //定义在代码块{}外面的变量我们称为全局变量
int main()
{
int local = 0; //定义在代码块{}里面的变量我们称为局部变量
int global = 0; //与代码块{}外全局变量名字相同但不冲突,但不建议这么写。
return 0;
}
注意:
- 局部变量和全局变量可以同时存在 。
- 当局部变量和全局变量的名字相同时,在函数体内部优先使用局部变量。
4.4 变量的使用
4.4.1 scanf函数的用法
#define _CRT_SECURE_NO_WARNINGS 1//在vs2022版本下使用scanf如果报错 需要引用这个定义
//scanf是C语言提供的,而scanf_s不是标准C语言提供的,是vs编译器提供
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int c = 0;
scanf("%d",&a); //scanf函数用法:scanf("格式控制符",&取地址符 变量名)
//&是取地址符号,把输入的数字放在a这个变量的地址当中
scanf("%d%d",&b,&c); //在输入多个数时,两个数之间需要用空格隔开,区分两个数字
printf("%d",a);
return 0;
}
这个时候我们运行,光标在闪烁等待我们输入。这个时候我们输入10按下回车,printf函数就将我们输入的内容给打印出来了。
接下来我们看看如何使用变量吧:
#define _CRT_SECURE_NO_WARNINGS 1 //在vs2022版本下使用scanf如果报错 需要引用这个定义
#include <stdio.h>
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
scanf("%d%d",&num1,&num2); //使用输入函数scanf
//在输入多个数时,两个数之间需要用空格隔开,区分两个数字。
sum = num1 + num2; //计算两个数字的和,将结果赋给sum
printf("sum = %d\n",sum); //打印答案
return 0;
}
这个时候我们运行,光标在闪烁等待我们输入。这个时候我们输入10,然后使用空格。将后面要输入的数字20分隔开,按下回车。printf函数就将我们输入的两个数字相加打印出来答案是sum=30。
4.5 变量的作用域和生命周期
作用域
作用域是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的而限定这个名字的可用性的代码范围就是这个名字的作用域。
- 局部变量的作用域是变量所在的局部范围。
- 全局变量的作用域是整个工程。
生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
- 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
- 全局变量的生命周期是:整个程序的生命周期。
举个例子:
//局部变量的生命周期
#include <stdio.h>
int main()
{
{
int a = 10; //a进入这个大括号就向内存要了4个字节存放10
} //出了这个范围就把内存还给系统了 也就是销毁了
printf("%d\n", a); //出了作用域的局部变量 变量a生命周期结束了 会报错!
return 0;
}
出了作用域的局部变量 变量a生命周期结束了 会报错!
然后再让们看看全局变量的声明周期:
#include <stdio.h>
int a=10;
int main()
{
{
printf("1.a=%d",a); //第一次打印
}
printf("2.a=%d",a); //第二次打印
return 0;
}
接下来让我们运行,看一下能不能够打印出来
我们可以看到两次都打印出来了,所以我们得到全局变量的生命周期是整个程序的生命周期。
#include <stdio.h>
extern int a=10; //extern (声明外部符号)如果我们在变量a前面加一个extern
//变量a就可以在整个.C源文件下使用了 哪怕你创建了n个文件
int main()
{
{
printf("1.a=%d",a); //第一次打印
}
printf("2.a=%d",a); //第二次打印
return 0;
}
运行起来看一下:
所以我们得出,全局变量的作用域是整个工程!简单概括来讲,作用域决定了变量在哪里可以使用。而生命周期决定了这个变量从什么时候开始创建,到什么时候销毁。
4.6 常量
C语言中的常量和变量的定义的形式有所差异。
C语言中的常量分为以下以下几种:
- 字面常量
- const 修饰的常变量
- #define 定义的标识符常量
- 枚举常量
4.61 字面常量
#include <stdio.h>
int main()
{
30; //整型字面常量
3.14; //浮点型字面常量
'a'; //字符字面常量
"abcdef" //字符串字面常量
return 0;
}
4.62 const 修饰的常变量
#include <stdio.h>
int main()
{
int num=100;
num=200; //我们把num这个变量改成200
printf("%d",num);
return 0;
}
代码运行一下:
我们可以看到num这个变量是可以被修改的,接下来我们使用const来修饰一下,看看最后会打印什么出来!
#include <stdio.h>
int main()
{
const int num=100;
num=200; //这里我们把num这个常变量改成200 这里语法会报错
printf("%d"