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

目录
  • 一.变量
    • 1.1定义变量的方法
    • 1.2变量的分类
    • 1.3变量的使用
  • 二.常量
    • 2.1字面常量
    • 2.2 const修饰的常变量
    • 2.3#define定义的标识符常量
    • 2.4 枚举常量
  • 三.字符和字符串
    • 3.1 定义
    • 3.2字符串的应用
    • 3.3转义字符
  • 四.注释
  • 总结

一.变量

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++语言的注释风格,//后整行皆为注释内容,也是现在比较流行的注释方式。

总结

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

(0)

相关推荐

  • C语言中的常量详解

    目录 C语言中的常量 字面常量 #define定义的标识符常量 枚举常量 C语言中的常量 C编程中的常量是一些固定的值,它在整个程序运行过程中无法被改变. 字面常量 字面常量是直接写出的固定值,它包含C语言中可用的数据类型,可分为整型常量,字符常量等.如:9.9,"hello"等就属于这一类常量. ##const修饰的常变量 有的时候我们希望定义这么一种变量:值不能被修改,在整个作用域中都维持原值.为了满足用户需求,C语言标准提供了const关键字.在定义变量的同时,在变量名之前加上c

  • 详解C语言中的常量指针和指针常量

    概述 对于新手来说,指针在c语言里总是一个非常难以理解的概念.在这篇文章中,我们将解释常量指针,指针常量,const pointer to const(ps:楼主以为这可以翻译成指向常量的常量指针)的区别 常量指针 让我们先来理解什么是常量指针.常量指针是指指针指向的地址是常量.换句话说,一旦常量指针指向了一个变量,你不能让该常量指针指向其他变量了 常量指针的声明方法如下: <type of pointer> * const <name of pointer> 常量指针声明示例:

  • 详解C语言中的符号常量、变量与算术表达式

    C语言中的符号常量 在结束讨论温度转换程序前,我们再来看一下符号常量.在程序中使用 300.20 等类似的"幻数"并不是一个好习惯,它们几乎无法向以后阅读该程序的人提供什么信息,而且使程序的修改变得更加困难.处理这种幻数的一种方法是赋予它们有意义的名字.#define 指令可以把符号名(或称为符号常量)定义为一个特定的字符串: #define 名字 替换文本 在该定义之后,程序中出现的所有在 #define 中定义的名字(既没有用引号引起来,也不是其它名字的一部分)都将用相应的替换文本

  • C语言中的四种常量详解

    目录 1.字面常量 2.const修饰的常变量 3.#define定义的标识符常量 4.枚举常量 总结 1.字面常量 字面常量正如我们从字面上简单理解的那样,是最简单的常量,下面给出例子帮助大家理解: //1.字面常量 100; //整型常量 3.14; //浮点常量 "abfdj"; //字符串型常量 'w'; //字符型常量 int a[100]; //其中的100也是常量,此处需注意,[]中的数字必须是常量,后面我们会用到这个 2.const修饰的常变量 const修饰的变量具有

  • C语言 常量详解及示例代码

    C 常量 常量是固定值,在程序执行期间不会改变.这些固定的值,又叫做字面量. 常量可以是任何的基本数据类型,比如整数常量.浮点常量.字符常量,或字符串字面值,也有枚举常量. 常量就像是常规的变量,只不过常量的值在定义后不能进行修改. 整数常量 整数常量可以是十进制.八进制或十六进制的常量.前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制. 整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long).

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

    目录 一.变量 1.1定义变量的方法 1.2变量的分类 1.3变量的使用 二.常量 2.1字面常量 2.2 const修饰的常变量 2.3#define定义的标识符常量 2.4 枚举常量 三.字符和字符串 3.1 定义 3.2字符串的应用 3.3转义字符 四.注释 总结 一.变量 1.1定义变量的方法 如图中所示,变量可被定义为各种数据类型,如int 整型 char字符数据类型,short短整型,float单精度浮点数,double双精度浮点数等等.一般在变量定义后,需给变量赋值,如图中对所有变

  • 重学Go语言之变量与常量的声明与使用详解

    目录 变量 变量名 声明 变量作用域 常量 iota 常量生成器 小结 变量 什么是变量?变量是一块可以随时存放数据的内存区域.在我们申请这块内存区域(声明变量)时,需要指定变量名以及变量的数据类型,数据类型用于说明变量可以存放什么值. Go是强类型语言,因此Go的变量需要先声明再使用,且声明后不可以改变其数据类型. 变量名 变量名必须以字母或下划线开头. 变量名区分大小写,比如Version和version是两个不同的变量. 不能用关键字(25个)和保留字(37个)给变量命名. 声明 Go语言

  • Go语言的变量、函数、Socks5代理服务器示例详解

    Go语言中变量的声明和JavaScript很像,使用var关键字,变量的声明.定义有好几种形式 1. 变量和常量 // 声明并初始化一个变量 var m int = 10 // 声明初始化多个变量 var i, j, k = 1, 2, 3 // 多个变量的声明(注意小括号的使用) var( no int name string ) // 声明时不指明类型,通过初始化值来推导 var b = true // bool型 // := 隐含声明变量并赋值 str := "mimvp.com"

  • C语言编程C++旋转字符操作串示例详解

    目录 旋转字符串 字符串左旋 题前认知: 暴力移位: 三步翻转: 判断字符串旋转 题前认知 字符串追加判断 旋转字符串 字符串左旋 实现一个函数,可以左旋字符串中的k个字符. 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 题前认知: 一个字符串如果就定死了.eg:char arr[]="dfdf"什么的那多没意思,一点都没有人机交互的感觉,(虽然现在人机交互适合个体,不适合集群,但也是比死板的定死字符串舒服) 所以字符串得是我们可输入的,才有可玩性,玩的不

  • Go语言字符串基础示例详解

    目录 包含 Contains(s,substr string) bool ContainsAny(s, chars string) bool 统计 Count(s, substr string) int 比较 EqualFold(s, t string) bool HasPrefix(s, prefix string) bool HasSuffix(s, suffix string) bool 分割 Fields(s string) []string 下标 Index(s, sep string

  • C++ 中字符串操作--宽窄字符转换的实例详解

    C++ 中字符串操作--宽窄字符转换的实例详解 MultiByteToWideChar int MultiByteToWideChar( _In_ UINT CodePage, _In_ DWORD dwFlags, _In_ LPCSTR lpMultiByteStr, _In_ int cbMultiByte, _Out_opt_ LPWSTR lpWideCharStr, _In_ int cchWideChar ); 参数描述: CodePage:常用CP_ACP.CP_UTF8 dwF

  • Cython处理C字符串的示例详解

    目录 楔子 创建 C 字符串 引用计数陷阱 strlen strcpy strcat strcmp sprintf 动态申请字符串内存 memset memcpy memmove memcmp 小结 楔子 在介绍数据类型的时候我们说过,Python 的数据类型相比 C 来说要更加的通用,但速度却远不及 C.如果你在使用 Cython 加速 Python 时遇到了瓶颈,但还希望更进一步,那么可以考虑将数据的类型替换成 C 的类型,特别是那些频繁出现的数据,比如整数.浮点数.字符串. 由于整数和浮点

  • C语言通过三步翻转法实现单词倒置详解

    目录 一.解题思路 二.完整代码与注释 三.代码剖析 1.实现字符串整体的翻转 2.一个单词的翻转 3.字符串中的每一个单词的翻转 一.解题思路 如何将一句话的单词倒置,而标点不倒置? 例如:I like beijing. 倒置成:beijing. like I 可以利用三步翻转法,先将整句话倒置,再将每个单词倒置.前面的例子中输入的内容有空格,如果使用 scanf() 函数的话,scanf 检测到空格后就停止录入了:所以要使用 gets() 函数,gets 可以直接录入一行,包括空格. 代码示

  • 基于Java中字符串内存位置详解

    前言 之前写过一篇关于JVM内存区域划分的文章,但是昨天接到蚂蚁金服的面试,问到JVM相关的内容,解释一下JVM的内存区域划分,这部分答得还不错,但是后来又问了Java里面String存放的位置,之前只记得String是一个不变的量,应该是要存放在常量池里面的,但是后来问到new一个String出来应该是放到哪里的,这个应该是放到堆里面的,后来又问到String的引用是放在什么地方的,当时傻逼的说也是放在堆里面的,现在总结一下:基本类型的变量数据和对象的引用都是放在栈里面的,对象本身放在堆里面,

  • 基于字符串常用API(详解)

    API(Application Programming Interface):应用程序编程接口 使用Scanner 获取键盘录入的字符串 next() ; 在遇到空格的时候 会判定为当前的输入结束 空格之后的内容会收不到 nextLine(); 可以避免被空格中断 , 但是在于接收数字一起使用的时候会被干扰 创建字符串对象 public String(String original) ---> 通过字符串创建一个字符串对象 public String(char[] value) -=--> 通

随机推荐