【C语言基础知识(二)】

提示:本篇文章为C语言数据类型的个人总结,内容如若有误,请及时联系我更正。

  • 如若转载请注明原创,谢谢。


前言

大家好,我是小明,很抱歉由于个人原因断更了一段时间,从今天开始恢复正常更新,今天总结的是C语言数据类型相关知识。


在这里插入图片描述

提示:以下是本篇文章正文内容:

一、数据类型

C语言的数据类型是编程中非常重要的一部分,它们对于内存管理、数据操作、代码质量、程序性能和兼容性都有着直接影响。

  • 内存管理: 不同的数据类型占据不同大小的内存空间,了解数据类型可以帮助我们有效地管理内存。
  • 数据存储和操作: 数据类型定义了数据的特性和可进行的操作。例如,整数类型可以进行加减乘除等算术运算,字符类型可以表示文本数据,数组类型可以存储一系列相同类型的数据等。
  • 提高代码可读性和可维护性: 使用合适的数据类型可以使代码更易读、易懂,并且方便后续的维护工作。
  • 提高程序性能: 选择合适的数据类型可以提高程序的执行效率。较小的数据类型通常需要更少的内存空间,可以减少内存使用量和访问时间。
  • 兼容性和可移植性: 数据类型在不同的平台和编译器中可能会有差异。了解和正确使用C语言的数据类型可以增加代码的兼容性和可移植性,使程序能够在不同环境下正常运行。

那么,让我们来看一下C语言的数据类型:

数据类型 名称 所占字节(32位)
char 字符型 1
short 短整型 2
int 整型 4
long 长整型 4
long long 更长的整型 8
float 单精度浮点数 4
double 双精度浮点数 8
  • 查看数据类型的代码:
#include <stdio.h>
int main()
{
    
    
	//计算各种数据类型的大小(单位是 字节)
    printf("char:%d\n", sizeof(char));
    printf("short:%d\n", sizeof(short));
    printf("int:%d\n", sizeof(int));
    printf("long:%d\n", sizeof(long));
    printf("long long:%d\n", sizeof(long long));
    printf("float:%d\n", sizeof(float));
    printf("double:%d\n", sizeof(double));

    return 0;
}
  • 运行结果:
    在这里插入图片描述

我们可以用 sizeof 关键字 来看一下他们各自所占空间的大小(单位为字节)。

  • 字节:
  • 由上面的知识我们可以接触到一个新概念:字节。我们生活中有很多类似的计量单位,如:电脑C盘、D盘的内存,手机常见的128G、256G,512G内存等,还有我们上网时所用到的流量200M流量、500G流量、1TB流量等等。

  • 计算机中常见的存储单位主要有:bit(位)、B(字节)、KB(千字节)、MB(兆字节)、GB(千兆字节)、TB(太字节)、PB(拍字节)。
  • 字节是存储数据的基本单位,并且是硬件所能访问最小单位。内存中存储数据的最小单位是“位”。字节是存储数据的基本单位,位是存储数据的最小单位,不要混淆了。C语言中一个字节通常由8位二进制数组成,可以表示256个不同的值,范围是从0到255。
  • 内存里面存放的全是二进制代码。内存里面有很多“小格子”,每个“格子”中只能够存放一个0或者1。一个“小格子”就是一(bit),所以“位”要么是0,要么是1,不会有比 “ 位 ” 更小的单位。
    在这里插入图片描述
  • 8个“小格子”就是一字节,即一字节等于8位。(字节Byte,缩写 B)
    常见存储单位的换算关系:8Bit = 1B;1024B = 1KB;1024KB = 1MB;1024MB = 1GB;1024GB = 1TB;1024TB = 1PB。

二、变量

1.什么是变量?

现实生活中我们会找一个盒子来存放物品,一来显得不那么凌乱,二来方便以后找到。计算机也是这个道理,我们需要先在内存中找一块区域,规定用它来存放数值,并起一个好记的名字,只要这个盒子还在,数值就会一直被保存,并且可以自由的取出和更改数值。
在这里插入图片描述

2.变量的定义

程序中用到的变量 必须 “先定义,后使用”。

1.不完全初始化:
数据类型 变量名

int a;
int b; 
int num;//此时a,b,num的值是随机值

2.初始化:
数据类型 变量名 = 初始化

int a = 10;
int b = 20;
int num = 999; //声明时初始化

int x; 
x = 999; //先声明变量 x,后初始化为 999

3. 连续定义多个变量:
数据类型 变量名= 初始化 变量名 = 初始化 变量名 = 初始化

注意:连续定义多个变量需要拥有相同数据类型,变量可以初始化,也可以不初始化。

//中间以逗号(,)隔开,结尾以分号(;)结束
int a = 10, b = 20 , num = 999;//初始化
int a, b, num; //不初始化

char M, N, P;
int a, b, c;  //两个不同类型定义时需分别定义

3.变量的命名

变量的命名:

1. 只能由字母、数字、下划线组成,且第一个字符不能数字
2. C语言的标识符是 区分 大小写的,即一个字母的大小写,被认为是两个不同的字符
3. 不能使用 关键字 做为变量名

4.全局变量 和 局部变量

全局变量具有全局作用域,它可以在整个程序中的任何地方访问。

局部变量具有局部作用域,它只能在定义它的花括号{ }内访问。

例如:

#include <stdio.h>

int z = 20;//全局变量

int main()
{
    
    
    int x = 10;//局部变量
    int y = 20;//局部变量
    
    return 0;
}

那假如我们将全局变量和局部变量初始化为同名时,又该使用哪个值呢?
我们可以用一段代码来判断:

#include <stdio.h>
int year = 2023;//全局变量
int main()
{
    
    
    int year = 2022;//局部变量
    printf("现在是 %d 年\n", year);
    
    return 0;
}

在这里插入图片描述
由此可见,当局部变量和全局变量同名的时候,局部变量优先使用

5.变量的 作用域 和 声明周期

作用域:

通常来说,作用域 指变量在程序中可见的范围。

生命周期:

生命周期 指的是变量或对象存在的时间范围。

变量的作用域和生命周期:

作用域 生命周期 默认值
普通全局变量 程序运行就创建,程序退出就销毁 都可以用,也可以被其他文件引用 0
静态全局变量 程序运行就创建,程序退出就销毁 不可以被其他文件引用 0
普通局部变量 进入该函数就创建,退出该函数就销毁 只在函数内部有效 随机值
静态局部变量 第一次进入该函数时创建,直到整个程序退出才销毁 在函数内部有效 0

三、常量

1.常量的定义

  • 常量,表示一些固定的数据,也就是不能改变的数据。例如性别,男孩子女孩子,圆周率π等等这些固定且不会变的。(你要非说想去泰国,我只能说佩服你)

2.常量的分类

  • #define 定义的标识符常量
  • const 修饰的常变量
  • 字面常量
  • 枚举常量

我们可以由下面这段代码来理解:

#include <stdio.h>
enum Sex
{
    
    
 MALE,
 FEMALE,
 SECRET
};
//括号中的MALE,FEMALE,SECRET是枚举常量
int main()
{
    
    
    //字面常量演示
    // 3.1415926;  //字面常量
    // 2022;  //字面常量
    
    //const 修饰的常变量
    const float p = 3.14f;   //这里的p是const修饰的常变量
    pai = 5.14;//是不能直接修改的!    
    //#define的标识符常量 演示
    #define NUM 100
    printf("num = %d\n", NUM);
    
    //枚举常量演示
    printf("%d\n", MALE);
    printf("%d\n", FEMALE);
    printf("%d\n", SECRET);
    //注:枚举常量的默认是从0开始,依次向下递增1的
    //也可赋值依次递增
     
    return 0;
}

3.常见的常量类型

整型常量:

  • 十进制整数。
    例如:666-1200
  • 八进制整数,八进制形式的常量都以 0 开头。
    例如: 0123,也就是十进制的 83-011 , 也就是十进制的 -9
  • 十六进制整数,十六进制的常量都是以0x开头。
    例如:0x123,也就是十进制的 291
  • 二进制整数,逢二进一,0b开头。
    例如: 0b0010,也就是十进制的 2

实型常量:

  • 小数形式
  • 单精度小数:以字母 f 或字母 F 结尾。
    例如:0.0f、1.01f
  • 双精度小数:十进制小数形式。
    例如:3.14、 6.66
  • 默认就是双精度
  • 可以没有整数位只有小数位。
    例如: .3、 .6f

  • 指数形式
  • 以幂的形式表示,以字母 e 或字母 E 后跟一个以10为底的幂数
    例如:
    C语言中的 2E32e3 表示数学中的 2 × 10 ²
    C语言中的 1.23e41.23E4 表示数学中的 1.23×10⁴,即 12300
  • 字母 E / e 后面的指数必须整数
  • 字母 E / e 前后必须要有数字
  • 字母 E / e 前后不能空格

字符常量:

  • 字符型常量都是用 ' ' (单引号)括起来的。
    例如: ‘a’‘b’‘c’
  • 字符常量的单引号中只能有一个字符
  • 特殊情况: 如果是转义字符,单引号中可以有两个字符。
    例如: ’\n’表示回车、’\t’表示制表符

字符串常量:

  • 字符型常量都是用 " " (双引号) 括起来的。
    例如:“a”“abc”“xiaoming”
  • 系统会自动在字符串常量的末尾加一个字符'\0'作为字符串结束标志

自定义常量:

此处先不用了解,后期涉及到的时候再讲

四、字符串和转义字符

1. 字符串

由上面常量涉及到的字符串,我们可以更为细致的总结一下:

“hello 小明”
这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串


注:字符串的结束标志是一个 \0 的转义字符。这个 \0 在计算字符串长度的时是 \0 是结束标志,不算作字符串内容。

让我们用两段代码来探究一下 \0 的具体作用:

#include <stdio.h>
int main()
{
    
    
    char arr1[] = "ming";
    char arr2[] = {
    
    'm', 'i', 'n','g'};
    char arr3[] = {
    
    'm', 'i', 'n','g', '\0'};
    printf("%s\n", arr1);
    printf("%s\n", arr2);
    printf("%s\n", arr3);
    return 0;
}

执行结果:
在这里插入图片描述

由此可见,在没有 \0 做结尾时,arr2 在打印完 ming 后又随机打印了一段我们不需要的字符串,这是因为在初始化字符串数组时,只初始化了’m’, ‘i’, ‘n’,‘g’,而没有’\0’,所以当printf函数读到’g’时不会停止,它会一直往后走直到找到’\0’才会停止。

然后我们在通过strlen函数求一下三个字符串的长度,来观察一下有 \0 和没有 \0 的区别:

#include <stdio.h>
#include <string.h>
int main()
{
    
    
    char arr1[] = "ming";
    char arr2[] = {
    
     'm', 'i', 'n','g' };
    char arr3[] = {
    
     'm', 'i', 'n','g', '\0' };

    printf("arr1: %d\n", strlen(arr1));
    printf("arr2: %d\n", strlen(arr2));
    printf("arr3: %d\n", strlen(arr3));

    return 0;
}

执行结果:
在这里插入图片描述

由上面可以看出,有 \0 的 arr1 和 arr3 两个字符串正常求得长度为4,而我们没有 \0 做结尾的 arr2 则求到了一个随机值16,这说明我们在求完长度后没有停止,一直往后找了12才遇到 \0 。

2.转义字符

通俗的讲,转义字符就是一种特殊的字符,这种字符是以反斜杠 \ 开头,用于实现特殊的要求。

转义字符 含义
\n 换行,从当前位置移到下一行
\t 水平制表符(跳到下一个tab位置)
\v 垂直制表符
\b 退格
\r 回车
\’ 单撇号字符
\‘’ 双撇号字符
\\ 表示一个反斜杠,以防被解释为一个转义序列符
\? 问号,以防被解释为三字母词
\ddd ddd表示1~3位八进制的数字
\xdd dd表示1~2位十六进制数字
\0 空字符

最后的最后,小明为大家准备了一段代码,大家可以自己研究一下结果:

#include <stdio.h>
int main()
{
    
    
    printf("\"hr\bi\'\40mil\bng!\"!\b\n");

    return 0;
}

运行结果:
在这里插入图片描述

完结

好啦,阅读到这里就已经看完了本期博客的全部内容了
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/mingloveyang/article/details/132192204