C语言的变量与常量 字符字符串与转义字符详解

 更新时间:2021年10月18日 09:43:30   作者:HAORANCHIDOUZI  
这篇文章主要介绍了详解C语言的变量与常量 字符字符串与转义字符,包括其之间的区别是C语言入门学习中的基础知识,需要的朋友可以参考下

一.变量

1.1定义变量的方法

如图中所示,变量可被定义为各种数据类型,如int 整型 char字符数据类型,short短整型,float单精度浮点数,double双精度浮点数等等。一般在变量定义后,需给变量赋值,如图中对所有变量给与了0的赋值,这也是一个良好的代码习惯。

1.2变量的分类

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

局部变量:定义在代码块内部的变量,一个大括号中所有代码便是一个代码块,局部变量只在代码块中存在和生效,如下图中这种情况

变量被定义a和第一个输出函数printf在同一个代码块中,所以输出函数可以成功的输出代码a的值0。但变量b被定义的代码块和第二个输出函数printf不在同一个代码块中,变量b只在其被定义的代码块中存在,在第二个输出函数printf所在的代码块中不存在,所以编译器会报错,未定义标识符b。

如果是上图这种情况,变量a的值是可以被输出的,因为输出函数printf仍在变量a所在的这个整体的代码块(大括号之中)。

如上的变量a与变量b,被定义在某一个代码块中的变量,即为局部变量。

全局变量:被定义在代码块之外的变量,但要保证在#include<stdio.h>之后才定义,作用域为全体范围,整个程序的作用域该变量均存在。 

如上图该程序的输出结果为10。但当代码块中出现和全局变量同名的变量时,全局变量的值会被覆盖,如下图。会将代码块中局部变量的值覆盖全局变量的值,但仅在该代码块中起到这样的效果,如果其它代码块中没有和全局变量同名的局部变量,仍以全局变量的值为该变量的值。

1.3变量的使用

先定义变量,然后变量可以参加加减乘除等运算,也可以使用printf输出函数打印该变量的值,或者使用scanf输入函数,从外部输入对该变量进行赋值。

输入该变量的值时候,要在该变量前面加&符号,&符号的意思是取地址,又叫取地址符号。

二.常量

C语言中常量分为字面常量(包括字符常量,const 修饰的常变量,#define定义的标识符常量,枚举常量四种常量。

2.1字面常量

字面常量即用数字和字符组成的常量,如下图所示。

 2.2 const修饰的常变量

如上图所示,对在定义一个变量的时候在前面加上const代表该变量是不可修改的。但该变量本质上还是作为一个变量存在,又被称为常变量。例如在定义数组的时候只能使用常量,假如使用了const修饰的常变量,大部分编译器会报错(因为在C99标准之前,变长数组,不允许用变量指定数组大小)。如下图所示,定义数组大小只可以用常量!!

 2.3#define定义的标识符常量

 

如上图所示可以用#define+常量名+具体大小的形式定义标识符常量,上图的MAX便是这么定义的,在代码习惯中一般用大写字母。

2.4 枚举常量

枚举的意思是可以一一列举,如生活中的性别(男性和女性),人种(黄种人,白种人和黑种人),这样种类比较少的常量可以用枚举类型,作为枚举常量。

定义枚举类型的时候如上图所示,枚举这种类型可能的取值就是枚举常量。枚举常量和枚举常量之前用逗号隔开,所有的枚举常量被放在一个大括号中,在该大括号的末尾用分号作为结束。 

三.字符和字符串

3.1 定义

由单引号引起的单个字符或者字母被成为字符,如'a'  'b'均为字符,由双引号引起的一串字符被成为字符串如"abc" "sfc"都被成为字符串,""也是字符串的一种,被成为空字符串。如下图所示,'a' '#'为字符,"abc","a","",均为字符串。

 3.2字符串的应用

可以将字符串放在在字符数组中,如定义一个字符数组 char arr1[]="abc";这里的arr为该字符数组的名称。但不能将字符串放在一个变量中,如char ch="abc";这样的形式是错误的。

字符串还可以用strlen函数去计算长度,但在使用strlen计算字符串长度之前,去引用头函数#include<string.h>。在计算字符串长度的时候每一个字符是1长度,但转义字符也是一个字符,整体算一个长度。在用strlen函数计算长度的时候'\0'为终止的位置,字符串后自带一个'\0',字符后需要人为添加'\0',否则在计算字符长度的时候,会一直到内存中出现'\0'的时候才会停止,这样的话字符的长度便成为了一个随机数,显然是不行的,所以要人为添加'\0'。

常用的转义字符如上图,\ddd的意识为后面跟一个,两个或者三个8以下的数字时,需要将整体八进制转换为十进制,再根据ASCII码值输出ASCI码值对应的字符。\xdd的意思为后面\x跟着两个十六进制的数字,整体为一个转义字符,将十六进制的转化为十进制,再输出其对应的字符。

3.3转义字符

即在C语言中,有时间一些字符的意思可能被编译器曲解,所以这时候需要用转义字符来转变原来的意思,得到我们想要的意思。

例如在上图中,我们想要打印test.c这个文件的位置,但结果缺不尽人意,因为两个\t被识别为转义字符,意识是缩进四格。\104被识别为\DDD的形式,104被当作一个八进制的数字,在转化为十进制的数后输出了其ASCII码值对应的字符——大写字母D。举例,如下图所示\DDD和\XDD的情况。

如上图所示,\DDD先将其转化为十进制,\071转化为十进制是57,而57对应的ASCII值对应的字符为9,所以打印输出了9.\XDD同理先将转化为十进制,\x62转化为10进制是98,而98对应的ASCII值对应的字符为b。故printf函数打印了小写字母b。

如果不想造成上上上图的困扰,正确的打印该文件在计算机中的存储位置,这时候就需要在每个\再加一个\,对其进行转移,便能正确输出了,如下图所示。

四.注释

注释分为C注释方式和C++注释方式。//C99之后引入的注释方式 ---> C++的注释风格/*  C99之前C语言的注释方式 --> C的注释风格, 缺陷是不支持嵌套注释*/

上图为C语言的注释风格,缺陷是不能进行嵌套注释,会在遇到第一个*/时候注释停止。

上图是C++语言的注释风格,//后整行皆为注释内容,也是现在比较流行的注释方式。 

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!

相关文章

  • C++发送HTTP请求的实现代码

    C++发送HTTP请求的实现代码

    这篇文章主要介绍了C++发送HTTP请求的实现代码,需要的朋友可以参考下
    2014-06-06
  • c++ primer中的const限定符

    c++ primer中的const限定符

    这篇文章主要介绍了c++ primer中的const限定符,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • 基于OpenCV实现的人脸签到系统源代码

    基于OpenCV实现的人脸签到系统源代码

    本文从实际背景和需求出发,采用人脸识别签到考勤改变了传统人工检验的做法,极大提高了组织效率和办事能力,这篇文章主要给大家介绍了关于如何基于OpenCV实现的人脸签到系统的相关资料,需要的朋友可以参考下
    2024-04-04
  • C++中标准线程库的基本使用介绍

    C++中标准线程库的基本使用介绍

    大家好,本篇文章主要讲的是C++中标准线程库的基本使用介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • C语言实现动态开辟存储杨辉三角

    C语言实现动态开辟存储杨辉三角

    这篇文章主要介绍了如何利用C语言实现动态开辟存储杨辉三角,可以灵活的开辟空间,充分的利用空间。文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下
    2022-03-03
  • 深入分析Linux下如何对C语言进行编程

    深入分析Linux下如何对C语言进行编程

    本篇文章介绍了,如何在Linux下对C语言进行编程的详细概述。需要的朋友参考下
    2013-05-05
  • C语言详细讲解指针数组的用法

    C语言详细讲解指针数组的用法

    在C语言和C++等语言中,数组元素全为指针变量的数组称为指针数组,指针数组中的元素都必须具有相同的存储类型、指向相同数据类型的指针变量。指针数组比较适合用来指向若干个字符串,使字符串处理更加方便、灵活
    2022-05-05
  • C++中main函数怎样调用类内函数

    C++中main函数怎样调用类内函数

    这篇文章主要介绍了C++中main函数怎样调用类内函数问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • C语言文件打开的模式

    C语言文件打开的模式

    这篇文章主要介绍了C语言文件打开的模式,以及相关的原理和知识点做了分享,有兴趣的朋友参考学习下。
    2018-03-03
  • C++使用ImGUI框架开发一个简单程序

    C++使用ImGUI框架开发一个简单程序

    ImGui 是一个用于C++的用户界面库,跨平台、无依赖,支持OpenGL、DirectX等多种渲染API,下面就跟随小编一起学习一下如何使用ImGUI框架开发一个简单程序吧
    2023-08-08

最新评论