IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言第三课:数据类型、常/变量与字符 -> 正文阅读

[C++知识库]C语言第三课:数据类型、常/变量与字符

目录

前言:

定义与初始化、输入与输出:

1.定义与初始化:

2.输入与输出:

①.输入:

②.输出:

一、数据类型:

1.常见数据类型:

常见数据类型

2.格式说明字符:

常用格式说明符

二、常量与变量:

变量:

? ? ? ? 1.变量的定义:

? ? ? ? 2.变量的分类:

? ? ? ? 3.变量的作用域与生命周期:

常量:

? ? ? ? 1.常量的分类:

? ? ? ? 2.常量介绍:

? ? ? ? 3.常量举例:

三、字符:

1.字符串:? ? ?

2.转义字符:

全部转义字符与其意义

3.注释:


前言:

? ? ? ? 在前两篇文章中相信各位小伙伴们已经对C语言有了一些大致上的了解,从本文开始,我会和大家一起正式开启C语言的学习之路。

? ? ? ? 从本文开始,我将按照以下顺序为大家介绍C语言的相关知识:

? ? ? ? ? ? ? ? 1.数据类型

? ? ? ? ? ? ? ? 2.常量与变量

? ? ? ? ? ? ? ? 3.字符串与转义字符

????????????????4.选择语句

? ? ? ? ? ? ? ? 5.循环语句

? ? ? ? ? ? ? ? 6.函数

? ? ? ? ? ? ? ? 7.数组

? ? ? ? ? ? ? ? 8.操作符

? ? ? ? ? ? ? ? 9.常见关键字

? ? ? ? ? ? ? ? 10.define定义常量和宏

? ? ? ? ????????11.指针

? ? ? ? ? ? ? ? 12.结构体

? ? ? ? 而本文将为大家介绍数据类型常/变量字符三个部分。废话不多说,我们开始吧!

定义与初始化、输入与输出:

? ? ? ? 在所有知识开始之前,我们首先要来了解C语言最最基础的两个知识点:定义与初始化输入与输出

1.定义与初始化:

? ? ? ? 在我们使用变量时,首先需要对这个变量进行定义。它的作用是告诉计算机这,在我们的代码中有这么一个变量,可以在后续的代码中被引用:

//变量初始化的格式为:数据类型 变量名;
int a;
char b;
float c;
...

? ? ? ? 当我们定义好这些变量后,我们还要对它们进行初始化。而初始化的作用是给我们定义好的变量赋上一个初始值

//初始化的格式为:变量名 = 值;
a = 0;
b = 'a';
c = 1.0;
...
//且不建议初始化与变量分开书写,应当书写为:
int a = 0;
char b = 'a';
float c = 1.0;
...

? ? ? ? 当我们对一个变量的定义与初始化全部完成后,这个变量就可以在我们接下来的代码中进行使用了。

2.输入与输出:

? ? ? ? 一个程序不可能只有它自己在运行,更多的是由用户输入初始的数据,经由计算机根据提前设定好的代码对用户输入的数据进行计算和处理后,将最终结果向用户进行反馈:

#include<stdio.h>
//标准输入输出函数,当程序中使用scanf函数与printf函数时必须引用

int main()
{
    int a = 0;
    //变量的定义与初始化
    scanf("%d", &a);
    //按用户指定的格式从键盘上将数据输入到指定的变量中
    printf("%d\n", a);
    //按用户指定的格式将处理后的数据输出到屏幕上

    return 0;
}

①.输入:

? ? ? ? 在我们向代码中输入数据时,最常用到的就是scanf函数(格式输入函数),它的作用是按用户指定的格式从键盘上将处理后的数据输入到指定的变量中

scanf("%d %c %lf", &a, &b, &c);
//该函数的作用是按照双引号中的格式将数据输入a、b、c
//即按照a b c格式进行输入
//其中的%d、%c、%lf为数据类型,后续会为各位小伙伴们进行介绍

? ? ? ? 其中的“&”符号为取地址操作符,我们的计算机内存可以理解为是一整块“地皮”(空间),而变量的定义就像是在这块“地皮”上盖了一个小房间(开辟一块空间),用于存放我们的“住户”(变量),我们都知道我们每个人的的家都有自己的门牌号,在进行输入时,我们通过使用取地址操作符&来向计算机表明我们想要修改的数据所在的位置(通过“门牌号”进行查找),而取地址操作符就表示的是这个“门牌号”。

②.输出:

? ? ? ? 当我们需要程序把我们想要看到的结果进行打印(打印在屏幕上)时,我们往往会使用printf函数(格式输出函数)来实现这一操作,他的作用是按用户指定的格式将数据输出到屏幕上

printf("%d %c %lf\n", a, b, c);
//该函数的作用为按照双括号中的格式将数据打印在屏幕上
//即按照a b c的格式进行打印
//其中的\n为转义字符,作用是打印后换行,转义字符在后面也将会为各位小伙伴们进行介绍
//注:使用scanf函数进行数据输入时需要使用取地址操作符,而printf函数不需要

? ? ? ? scanf函数需要使用取地址操作符而printf函数不需要的原因是,使用scanf输入数据时,要修改的不是“住户”的地址,而是通过取地址操作找到对应的“住户”并对其进行修改,而使用printf函数输出数据时,打印的就是该地址的“住户”,故不需要使用取地址操作符。

一、数据类型:

? ? ? ? 了解了最基础的数据初始化与输入输出后,我们接下来要了解“数据类型”这个知识点。在C语言中存在着许多种数据类型,而这么多种数据类型的存在,其实就是为了便于我们更加丰富、准确而方便的表达生活中的各种值,例如一个人的姓名、年龄等等:

#include<stdio.h>

int main()
{
	int age = 18;
    //int定义整型变量
	char name = 'Z';
    //char定义字符变量

	printf("%c先生今年%d岁啦!\n", name, age);

	return 0;
}

????????以上代码我们运行起来后将会实现在屏幕上进行打印:

1.常见数据类型:

? ? ? ? 我们在C语言的学习过程中最常用的数据类型有以下几种,把它们整理成表格看一看:

常见数据类型

数据类型关键字字节长度取值范围
整形int4-2147483648~2147483647
无符号整型unsigned int40~4294967295
短整型short2-32768~32767
无符号短整型unsigned short20~65535
长整型long4-2147483648 ~ 2147483647
无符号长整形unsigned long40~4294967295
字符型char1-128~127
无符号字符型unsigned char10~255
单精度浮点型float4-3.4E38 ~ 3.4E38
双精度浮点型double8-1.79E308 ~ 1.79E308

? ? ? ? 由此可见,不同的数据类型的关键字与取值范围略有差异。字节长度就是这些数据类型在进行定义后在计算机中所占空间的大小

? ? ? ? 区分这么多中数据类型的意义在于,我们可以基于它们的取值范围不同,从而根据我们的实际需求来选择最合适的数据类型进行使用

????????例如,我们想要记录并存储“年龄”这一数据,使用短整型(short)来进行存储足以满足我们的需求而可以不使用整型(int)变量,每个短整型占用两个字节而每个整形却需要占用四个字节,足足节省了一半的空间,大幅度提升了程序的空间使用效率,同时得益于占用空间的减少,对于存储服务器等硬件设施的要求也大幅降低,能为小伙伴们的工作室节省大量成本

????????小伙伴们可能会认为,两字节与四字节并没有很大的区别,不会造成太大的影响。但事实上,我们在日常生活中在记录数据时并不会只记录单个的数据,更多的往往是记录大量数据,比如“全班同学的年龄”、“全校同学的年龄”甚至更多。更何况现如今市面上更是有着各种五花八门的程序,在使用时存储的用户数据量更是天文数字,所以对于程序占用空间的控制,就显得十分重要。

2.格式说明字符:

? ? ? ? 而在这些数据类型的使用过程中,往往还伴随着格式字符的使用。格式说明由"%"字符组成,作用是将输出的数据转化为指定的格式输出。常用的格式符有:

常用格式说明符

格式符作用格式符作用
%-数据输出左对齐%d有符号十进制整形输出
%ld以长整型输出%o以无符号八进制整形输出
%e以指数形式输出实数,不指定输出数据所占的宽度和数字部分的小数位数%x以无符号十六进制整型输出,或者输出字符串的地址
%u以十进制无符号整形形式输出%c用来输出一个字符
%s用来输出一个字符串%f不指定输出数据长度,实数部分全部输出,小数部分输出六位
%m.nf指定输出数据占m列,包括n位小数,若数值长度小于m,左补空格%m.ns输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格

二、常量与变量:

变量:

? ? ? ? 顾名思义,通俗来讲变量就是输入程序后会发生变化的量。(如:年龄、体重等)

? ? ? ? 1.变量的定义:

? ? ? ? 变量的定义格式为:数据类型+变量名+初始赋值

int age = 18;
char name = Z;
float weight = 93.4;
...

? ? ? ? 在前面的部分中,已经用表格为大家整理出了最常用的部分数据类型,且数据类型一般不可以自定义

? ? ? ? 变量名是由编写代码的小伙伴们自己进行定义的名称(自己给变量起一个名字),可以随意更改,但不建议过于简单或过于复杂,复杂程度适中有一定规律或意义最好。

? ? ? ? 变量的命名需要注意:只能由字母(区分大小写)、数字和下划线(_)组成不能以数字开头长度不得超过63个字符不得使用关键字(后续会介绍)作为变量名

? ? ? ? 2.变量的分类:

? ? ? ? 变量分为局部变量和全局变量。

#include<stdio.h>

int a = 0;
//定义全局变量,在整个程序中均可引用

int main()
{
    int b = 0;
    //定义局部变量,仅可在当前main()函数中使用
}

????????定义在函数内部的变量称为局部变量(Local Variable),它的作用域仅限于函数内部, 离开该函数后就是无效的,再使用就会报错。

? ? ? ? 而在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程序,也就是所有的源文件,包括 .c 和 .h 文件。

? ? ? ? 特别注意:当局部变量与全局变量同名时,遵循局部变量优先原则。(可以同时创建但不建议)

? ? ? ? 3.变量的作用域与生命周期:

? ? ? ? 作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效、可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。局部变量的作用域是变量的局部范围。全局变量的作用域是整个工程

? ? ? ? 生命周期()是指程序中的变量的创建到销毁之间的时间段。局部变量的生命周期是从进入作用域起到出作用域止。全局变量的生命周期是整个程序的生命周期

常量:

? ? ? ? 同样的,通俗来讲常量就是输入程序后不会发生变化的量。(如:性别、身份证号等)

? ? ? ? 1.常量的分类:

? ? ? ? C语言中的常量分为以下几种:

? ? ? ? ·?字面常量

????????·?const修饰的常变量

????????·?#define定义的标识符常量

? ? ? ? ·?枚举常量

? ? ? ? 2.常量介绍:

?????????字面常量指的是直接输入到程序中的值。字面常量包括:整形常量,字符型常量,字符串常量。注意:不存在数组常量,结构体常量等结构型的字面常量。但是存在结构型的符号常量。?

????????const修饰的常变量是指被关键字const进行修饰后的一些具有了常变量性质的变量,经const修饰的常变量在C语言中只是在语法层面限制了变量不能被直接改变(可以利用指针等方式进行改变),但其本质上仍为变量,故称之常变量。

? ? ? ? #define定义的标识符常量是指将标识符定义为其后的常量,一经定义,程序中就可以直接用标识符来表示这个常量。变量名表示的是一个变量,但宏名表示的是一个常量。可以给变量赋值,但绝不能给常量赋值。其中#define又称宏定义,标识符为所定义的宏名,简称。其特点是定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。预编译不是编译,而是编译前的处理,编译器正式开始编译程序之前,会执行一段预处理程序(又称预处理器)专门对程序执行预处理操作

????????枚举常量可以创建一个新类型,然后定义新的类型变量,将这些变量的取值定义为一组可能值。宏和枚举的主要区别是作用的时间和存储形式不同。宏定义是在编译预处理阶段作用的,也就是在编译预处理时,就会进行宏替换,将程序中的所有宏名替换为所定义的常量名,而枚举则是在程序运行之后才起作用的。宏定义不分配内存空间,而枚举常量存储在数据的静态存储区中(这一点一定要注意)。宏只占用代码段的空间,而枚举除了占用代码段空间外,还耗费CPU资源

? ? ? ? 3.常量举例:

#include<stdio.h>

#define MAX 100
//定义标识符常量,格式为:#define 常量名 值

enum Sex
{
    MALE,
    FEMALE,
    SECRET
};
//定义枚举常量,格式为:enum 枚举类型名{常量1,常量2,常量3,...};(特别注意这里要加";")
//枚举常量的值默认从0开始,向下依次加一

int main()
{
    3.14;//字面常量
    1000;//字面常量

    const float pai = 3.14f;
    //定义const修饰常变量,格式为:const 数据类型 变量名 = 值
    //pai是float类型的变量,使用const修饰后,具有了常量的性质,故称为常变量
    //其本质仍为变量,只是具有了常量的性质
    //默认为double类型,在3.14后加一个小写的f向计算机表示为float类型

    pai = 5.14;
    //此处的pai已经被const修饰过,具有了常量性质,故无法更改,此处的操作无效

    printf("%d",MAX);
    //验证标识符常量定义成功

    printf("%d", MALE);
    printf("%d", FEMALE);
    printf("%d", SECRET);
    //验证枚举常量定义成功

    return 0;
}

三、字符:

? ? ? ? 关于字符这部分,主要为小伙伴们介绍三个重点:字符串转义字符注释

1.字符串:? ? ?

"Hellow world !"

? ? ? ? 像这样由双引号()引起来的一串字符称为字符串字面值(),或简称字符串。字符串的结束标志是一个转义字符" \0 ",在计算字符串长度时\0是结束的标志,不算做字符串的内容不计入字符串的长度。?

#include<stdio.h>

int main()
{
    char arr1[] = "Hellow";
    char arr2[] = {'H', 'e', 'l', 'l', 'o', 'w', '\0'};
    char arr3[] = {'H', 'e', 'l', 'l', 'o', 'w'};
    printf("%s\n", arr1);
    printf("%s\n", arr2);
    printf("%s\n", arr3);

    return 0;
}

? ? ? ? 上面代码中,arr1与arr2的定义与初始化正确,且输出正常。但arr3的初始化中没有添加结束标志“\0”,同时printf输出函数在输出时读取到第一个终止符后停止,因为arr3中不含终止符则继续在内存中向后读取直到读到第一个\0终止符才停止,导致读取不稳定,表现为输出一段乱码。

? ? ? ? 所以小伙伴们一定要注意终止符' \0 '的重要性,万不可轻易遗漏。

2.转义字符:

? ? ? ? 假如我们希望在屏幕上打印一个目录:c:\code\test.c,该如何实现呢?很多小伙伴可能会写出下面这样的代码:

#include<stdio.h>

int main()
{
    printf("c:\code\test.c\n");
    return 0;
}

? ? ? ? 那么这样的代码能实现我们的目的吗?我们将其运行后,发现在我们的屏幕上打印出了如下内容:

? ? ? ? ?为什么没有按照我们的预期打印出我们想要的内容呢?这是因为在程序运行输出时,部分字符被识别成了转义字符而不是输出字符,产生了其它语义而没有进行打印,转义字符共有14个

全部转义字符与其意义

转义字符意义ASCII码值(十进制)
\??063
\''039
\''''034
\\\092
\a响铃(BEL)007
\b退格(BS)008
\f换页(FF)012
\n换行(LF)010
\r回车(CR)013
\t水平制表(HT)009
\v垂直制表(VT)011
\0空字符(NULL)000
\ddd1到3位八进制数八进制数
\xdd2位十六进制数十六进制数

????????上表为全部转义字符。

????????由上表不难看出,实际上我们书写的代码中的这一行中:

printf("c:\code\test.c\n");

? ? ? ? 字符“ \t ”被识别为了“水平制表符”,导致了输出差错的产生;且其中的字符“ \n ”也被正确识别为转义字符“换行”。

? ? ? ? 借助转义字符,小伙伴们们可以更加准确的表达我们的程序输出需求,对我们的信息输出格式进行优化,使信息输出更加整齐、美观等,作用多多。

3.注释:

? ? ? ? 在我们书写代码时,不需要的代码可以直接删除。但如果只是暂时不需要部分,直接删掉后倘若以后想要进行使用时,则需要我们进行备份或重新编写,过程十分繁琐复杂。再或者当小伙伴们的代码中有些代码比较难以阅读,需要添加一些说明文字时,都可以通过使用注释来实现。

? ? ? ? 例如:

#include<stdio.h>

int Add(int x, int y)
{
    return x+y;
}

/*C语言风格注释
int Sub(int x, int y)
{
    return x-y;
}
*/

int main()
{
    //C++风格注释
    //int a = 10;
    //调用Add函数完成加法计算
    printf("%d", Add(1, 2));
    //此处只关注注释的使用方法,关于函数的使用后续会为小伙伴们进行讲解

    return 0; 
}

? ? ? ? 上方代码块中使用了两种不同风格的注释,一种是C语言风格注释(/*...*/),另一种是C++风格注释(//...)。两种注释风格不同但作用相同,被注释掉的部分在程序运行时会被忽略而不执行,所以不必删除也不会对程序的运行造成影响。

? ? ? ? 两种注释风格,相比之下C++的风格更为实用。一是格式更加简单,只需在被注释掉部分前方加上" //?";而C语言风格则需要在被注释部分前后分别加上" /* "和" */ "。但更重要的是,C语言风格的注释不支持嵌套注释而C++风格的注释既可以注释一行,也可以注释多行。故建议各位小伙伴们使用C++风格注释

? ? ? ? 以上就是今天的全部学习内容啦!感谢各位小伙伴们的用心学习,坚持下去,明天的你们一定会感谢今天的自己!

????????新人初来乍到,辛苦各位小伙伴们动动小手,三连走一走 ~ ~ ~??最后,本文仍有许多不足之处,欢迎各位看官老爷随时私信批评指正!

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:06:35  更:2022-11-05 00:08:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 3:30:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码