我们可以用计算机语言来编写程序,而其目的是未来解决生活中问题,所以计算机语言必须有能力来描述生活中问题。
例如:当我们在一个购物商城中上架商品,需要输入价格、物品数量等,而在C语言中与之对应的应为浮点数和整型数据。
数据类型
作用:用于创建变量 ( e.g. int weigh = 120; )
char //字符数据类型
short //短整型
int //整形——%d
long //长整型
long long //更长的整形
float //单精度浮点数——打印用%f
double //双精度浮点数——打印用%lf
为什么出现这么的类型?每种类型的大小是多少?
- 类型丰富时选择性更多,可以提高空间利用率。
- 要想知道每种类型的大小,可以使用sizeof,计算类型或者变量所占空间的大小,单位为字节(byte)。
#include <stdio.h>
int main()
{
printf("%d\n",sizeof(char)); //计算char类型的大小——结果为1
printf ("%d\n", sizeof(short)); //2
printf("%d\n", sizeof(int)); //4
printf("%d\n",sizeof(long)); //4
printf("%d\n", sizeof(long long)); //8
printf("%d\n", sizeof(float)); //4
printf("%d\n", sizeof(double)); //8
return 0:
}
语言标准 sizeof(long)>=sizeof(int) 即可,所以都是4字节。
计算机中的单位有哪些?
bit - 比特位(计算机里最小的单位) - 用于存放一个二进制位
计算机中识别二进制:0 1
8进制:0~7
10进制:0~9
byte - 字节 =8bit
kb - 1024byte
mb - 1024 kb
gb - 1024 mb
tb - 1024gb
pb - 1024tb
变量
- 生活中的有些值是不变的(比如︰圆周率,性别( ? ),身份证号码,血型等等),这些可以用常量的概念来表示。
- 有些值是可变的(比如∶年龄,体重,薪资)。——用变量来表示
定义变量的方法
int age = 150; //给出类型和变量名字,赋不赋值都可以,但推荐创建时赋值。
age = age+1; //变量意味着可改。
int weight = 45.5f;
char ch = 'w';
变量的分类
- 局部变量
{}内部定义的 - 全局变量
{}外部定义的
#include <stdio.h>
int a = 100; //全局变量
int main()
{
int a =10; //局部变量
printf("%d\n",a); //打印结果为10
return 0;
}
- 当局部变量和全局变量冲突的情况下,局部优先起作用。
- 注意:不建议把全局变量和局部变量的名字命名为同一个。
- 变量创建可以写到{}外,但执行性代码不行(如:printf)。
变量的作用域和生命周期
- 通常来说,一段程序代码中所用到的名字并不总是有效/可用的, 而限定这个名字的可用性的代码范围就是这个名字的作用域。
int main()
{
printf("%d\n",a); //报错,因为a是局部变量。
{
int a = 10;
printf("%d\n",a);
}
return 0;
}
局部变量的作用域是变量所在的局部范围(大括号内)。
全局变量的作用域是整个工程。
同一工程里不同文件下全局变量要共同使用,使用前需声明。
//test1
#include <stdio.h>
int g_val = 2022;
//test2
#include <stdio.h>
extern int g_val; //声明变量
int main()
{
printf("%d\n",g_val);
return 0;
}
生命周期
- 指的是变量的创建到变量的销毁的一个时间段。
- 局部变量的生命周期:进入作用域开始,出作用域结束。
- 全局变量的生命周期:整个程序的生命周期——main函数的生命周期。
常量
C语言中的常量和变量的定义的形式有所差异,C语言中的常量:
- 字面常量
- const修饰的常变量
- #define定义的标识符常量(符号常量)
- 枚举常量——可以用于一一列举的常量
#include <stdio.h>
//#define定义的标识符常量
#define MAX 10000 //不用加分号
//枚举常量
enum sex
{ //以下三个值为这种枚举类型的未来可能取值
male, //枚举常量,可在此处赋初值:male=3,后续就等于3,不可再改
female,
secert
};
int main(){
// 3.14 —— 字面常量
int num = 10;
num = 20;
printf("%d\n",num); //num打印结果为20,此处num为变量,可修改值
//const修饰的常变量
sonst int num = 10; //此时num就是常变量,具有常属性——不能被改变的属性
num = 20;
printf("%d\n",num); //报错,被const修饰的值(变量)不可被修改
//#define
int n=MAX;
printf("n = %d\n",n); //打印结果为10000
//枚举常量
enum sex s = male;
printf("%d\n",male); //结果为0
printf("%d\n",female); //1
printf("%d\n",secret); //2
return 0;
}
- 被const修饰的变量虽然不可修改,但本质上还是变量(只是具有了常属性)。
- 在没有显示说明的情况下,枚举常量(也就是花括号中的常量名)默认第一个枚举常量的值为0,往后每个枚举常量依次递增。
//关于conset的本质举例
#include <stdio.h>
int main()
{
int arr[10] = {0}; //创建数组,里面有10个元素。
int n = 10;
int arr2[n] = {0}; //报错,n为变量,不行。
sonst int n = 10;
int arr3[n] = {0};
//依旧报错,n本质上还是变量,所以需要使用常量的地方依旧不可使用。
return 0;
}
字符串
- 由双引号""引起来的一串字符(单引号)称为字符串字面值,简称字符串。
- 注︰字符串的结束标志是一个\0的转义字符。在计算字符串长度的时候\0是结束标志,不算作字符串内容(不会算进去长度)。
- 求数组元素个数时算\0,求字符串时不算。
#include <stdio.h>
#include <string.h>
int main()
{
//字符数组——数组是一组同类型的元素
char arr[] = "hello"; //结尾位置隐藏了一个\0的字符
char arr1[] = "abc";
char arr2[] = {'a','b','c'};
//求字符串长度
int len = strlen("abc"); //需要引用头文件string.h
printf("%d\n",len); //打印结果为3
printf("%d\n",strlen(arr1)); //3
printf("%d\n",strlen(arr2)); //随机值——\0在哪就停在哪
//%s打印字符串
printf("%s\n",arr);
printf("%s\n",arr1); //打印结果为abc
printf("%s\n",arr2); //打印结果除了abc后面还有乱码
//arr1有\0:结束标志
//arr2无字符串结束标志,后续空间内容未知,所以会出现乱码
return 0;
}
转义字符
#include <stdio.h>
int mian()
{
printf("c : \test\test.c"); //打印结果为c: est est.c
printf("c : \\test\\test.c");
}
转义字符释义
//关于\?
//三字母词是什么
#include <stdio.h>
int main(){
printf("(are you ok??)");// ??)会被解析成]——三字母词
printf("(are you ok\?\?)"); //打印结果为(are you ok??)
//八进制数字
printf("%c\n",'\130'); // %c-打印字符
//1*8² + 3*8 + 0*8的零次 = 64 + 24 = 88
//X的ASCII码值是88,所以打印结果为X。
return 0;
}