前言
作为一名编程初学者,在学习C语言时,虽不是一帆风顺,但也是深刻地体会到了编程的乐趣。以下就是我在初次接触C语言后所整理的一系列关于c语言的基础知识,希望能够帮助到同样也是初学C语言的你!
1. 什么是C语言
简单来说,C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,被称为ANSI C,也被叫做C89/C90,作为C语言最初的标准,之后又产生了C99、C11等一系列标准。
C语言是一门面向过程的计算机编程语言,与C ,Java等面向对象的编程语言有所不同。其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
2. 第一个C语言程序
写一个代码在屏幕上打印hello world
代码语言:javascript复制//头文件的包含,printf是库函数,库函数的使用是需要包含头文件的
#include <stdio.h>//#的作用:预处理指令的开头就是#-->#include #define
//std i o-->standard input output 标准输入输出 .h-->header
int main()//main是主函数的意思,是程序的入口,有且仅有一个 int 函数的返回类型:整型
{
//打印hello world
printf("hello worldn");//""括起来的叫字符串
return 0;// C语言中的习惯:返回0表示正常返回,返回非0表示异常返回
}
3. 数据类型
- char---->字符数据类型
- short---->短整型
- int---->整形
- long---->长整型
- long long---->更长的整形
- float---->单精度浮点数
- double---->双精度浮点数
既然有这么多数据类型,那么每种类型的的大小是多少呢?
代码语言:javascript复制#include <stdio.h>
int main()
{
printf("%dn", sizeof(char));//1 单位:字节
printf("%dn", sizeof(short));//2
printf("%dn", sizeof(int));//4
printf("%dn", sizeof(long));//4或8 C语言标准规定:sizeof(long)>=sizeof(int)
printf("%dn", sizeof(long long));//8
printf("%dn", sizeof(float));//4 float 精度低
printf("%dn", sizeof(double));//8 double 精度高
return 0;
}
//%d 打印10进制的整数 注意:"%"不要漏!!!
//sizeof-->......的大小
总结:
数据类型 | 大小(单位:字节) |
---|---|
char | 1 |
short | 2 |
int | 4 |
long | 4/8 |
long long | 8 |
float | 4 |
double | 8 |
附:
单位 | 单位换算 |
---|---|
bit | / |
byte | 1 byte = 8 bit |
KB | 1 KB = 1024 byte |
MB | 1 MB = 1024 KB |
GB | 1 GB = 1024 MB |
TB | 1 TB = 1024 GB |
PB | 1 PB = 1024 TB |
… | … |
类型的使用
代码语言:javascript复制int main()
{
char ch = 'w';//单个字符用单引号('')引起来 字符串用双引号("")引起来
int weight = 120;
int salary = 20000;
return 0;
}
4. 变量、常量
生活中的有些值是不变的,如:性别,身份证号码,血型等;有些值是可变的,如:年龄,体重,薪资等。不变的值,C语言中用常量的概念来表示;变的值,C语言中用变量的概念来表示。
4.1 定义变量的方法
代码语言:javascript复制int main()
{
int age = 150;
float weight = 45.5f;
char ch = 'w';
return 0;
}
tips: (i)定义变量时要注意加上数据类型 (ii)在定义浮点数时,不论数据类型是float还是double,编译器默认是double,要使其变成float类型,就要在最后加上’f’,如:float weight = 45.5f;
4.2 变量的命名
- 只能由字母(包括大写和小写)、数字和下划线( _ )组成。(如:int a$b是错误的)
- 不能以数字开头。(如:int 3c是错误的)
- 长度不能超过63个字符。
- 变量名中区分大小写的。(如:int _3C和int _3c是不同的)
- 变量名不能使用关键字。(如:int float是错误的)
4.3 变量的分类
- 局部变量
- 全局变量
int b = 20;//全局变量-->大括号外面的
void test()
{
int c;//局部变量
}
int main()
{
int a = 10;//局部变量-->大括号里面的
return 0;
}
代码语言:javascript复制#include <stdio.h>
int a = 20;
int main()
{
int a = 10;
//局部变量和全局变量的名字可以相同,当我们既可以使用局部,又可以使用全局变量的时候,局部变量优先。
printf("%dn", a);
return 0;
}
4.4 变量的使用
写一个程序计算2个整数的和
代码语言:javascript复制#include <stdio.h>
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
//1.输入2个整数
scanf("%d %d", &num1, &num2);//scanf - 输入 &-->取地址
//2.求和
sum = num1 num2;
//3.输出
printf("%dn", sum);//printf - 输出/打印
return 0;
}
tips: (i) n 表示换行,不要漏加 (ii) scanf这个函数后面不用加n
4.5 变量的作用域和生命周期
作用域:
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用 的而限定这个名字的可用性的代码范围就是这个名字的作用域。
- 局部变量的作用域是变量所在的局部范围
- 全局变量的作用域是整个工程
局部变量的作用域是变量所在的局部范围:
全局变量的作用域是整个工程:
例1:
例2:
代码语言:javascript复制//第一个源文件:add.c
int g_val = 2022;//全局变量 --> 作用域是整个工程
代码语言:javascript复制//第二个源文件:test.c
#include <stdio.h>
extern int g_val;//extern是用来声明外部符号的
int main()
{
printf("%dn", g_val);//所以这里的g_val能被打印出来
return 0;
}
注: C语言的源文件是.c,不是.cpp
生命周期:
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
- 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
- 全局变量的生命周期是:整个程序的生命周期。
4.6 常量
C语言中的常量分为以下几种:
- 字面常量
- const 修饰的常变量
- #define 定义的标识符常量
- 枚举常量
字面常量:
代码语言:javascript复制int main()
{
//100;
//3.14;
//'a';
//"abcdef";
return 0;
}
const 修饰的常变量:
代码语言:javascript复制int main()
{
const int n = 10;
n = 20;//这样写是错误的,因为n已经被const修饰,不能改变它的数值了
int arr[10] = {0};//数组,这样写是正确的
int arr[n] = {0};//这样写是错误的,因为arr[] = {0}的[]中填的应该是常量
return 0;
}
总结: 被const修饰后因不能改变数值,因此其具有常属性,但其本质上是一个变量
#define 定义的标识符常量:
代码语言:javascript复制#include <stdio.h>
#define MAX 100
int main()
{
printf("%dn", MAX);
MAX = 200;//这样写是错误的,因为MAX是被#define定义的标识符常量
return 0;
}
枚举常量:
代码语言:javascript复制//枚举 -> 一一列举
//性别:男、女、保密
//三原色:红、绿、蓝
//枚举的关键字-->enum
#include <stdio.h>
enum Sex
{
//下面是enum Sex类型变量的可能取值,这三个可能取值就是枚举常量
MALE,
FEMALE,
SECRET
};
int main()
{
enum Sex s = MALE;//性别
printf("%dn", MALE);//0
printf("%dn", FEMALE);//1
printf("%dn", SECRET);//2
return 0;
}