C语言中的字符常量与变量

article/2024/12/22 18:56:13

字符常量与变量

  在这一节中,我们来讨论字符与字符串。

1. 字符常量

  如果我想在屏幕上打印"HelloWorld"。应该怎样做呢?大家应该很熟悉这个代码了。

#include <stdio.h>
int main()
{printf("HelloWorld\n");return 0;
}

  我们使用printf函数,第一个参数是需要输出的字符串。字符串用双引号包括。

  不知道大家有没有考虑过,字符串是由什么组成的呢?没错,就是我们这一节讨论的字符了。

  那如果我单独用字符来打印HelloWorld,将代码改为如下这样。

#include <stdio.h>
int main()
{printf("H");printf("e");printf("l");printf("l");printf("o");printf("W");printf("o");printf("r");printf("l");printf("d");printf("\n");return 0;
}

  这样看上去是在单个单个的输出字符。但是,我们要注意,字符串是用双引号包括的。也就是说,这上面输出的仍然是字符串,只不过是只有一个可打印字符的字符串罢了。

  那我们怎样,用单个字符的形式来输出呢?

  定义:字符常量由单引号包括

  类似于’a’  ,  ‘b’ ,  ‘c’ ,  ‘1’ ,  ‘2’ ,  ‘\n’。这样的都是字符常量。

  'ab’这样的写法是错误的,字符常量只允许有一个字符。如果需要多个字符,请使用字符串"ab"。

  那么,’\n’不是两个字符吗?是的,\n是两个字符,但是它代表的是换行符。我们C语言中,换行符没法直接打在代码当中。难道要像下面这样打出来?

'
'

  而且,会和代码格式的换行弄混淆。所以,我们用\来表示转义,斜杠加字母的形式,表示为另一个意思。这样的字符有很多,例如,换行’\n’,退格’\b’,制表’\t’等等。

  好的,那我们知道了,单引号包括的是字符,那我们这样打印行不行?

#include <stdio.h>
int main()
{printf('H');printf('e');printf('l');printf('l');printf('o');printf('W');printf('o');printf('r');printf('l');printf('d');printf('\n');return 0;
}

  答案是不行的,这样会编译报错。为什么呢?printf的第一个参数必须是字符串。那如果是这样的话,我们考虑能不能用printf函数的占位符来给字符占位。然后,在printf的后续参数里面传入字符串呢。之前我们已经了解到了,整数用%d,浮点数用%f。那么字符用什么呢?

  字符请使用转换方式%c。

#include <stdio.h>
int main()
{printf("%c%c%c%c%c%c%c%c%c%c%c", 'h', 'e', 'l', 'l', 'o', 'W', 'o', 'r', 'l', 'd', '\n');return 0;
}

  正如你看到的,%c可以用于给字符占位。

2. 字符类型与字符变量

  有了字符常量,那我们肯定需要一种类型,来定义字符变量。

  关键词char,是字符类型。

  定义一个字符变量

char c1 = 'a';
char c2 = '1';
char c3 = '\n';

  打印这三个变量

#include <stdio.h>
int main()
{char c1 = 'a';char c2 = '\n';char c3 = '1';printf("c1=%c c2=%c c3=%c", c1, c2, c3);return 0;
}

printf_char

  第一个%c被替换成了a,第二个被替换成了换行,第三个被替换成了1。

  那么我们来看看,char这种类型的数据大小吧,用关键词sizeof。

sizeof_char

  好的,我们证实了,char都是1个字节的。

  接下来,我们思考一个问题。事实上,我们在整型那一节中,已经见过char了,char也属于一种整型变量。而在printf那一节中,我们知道了对于变参函数的可变参数部分。比int小的整型类型,都会转换为int。所以,我们可以用%d来打印short类型。很显然,char是一个字节,肯定是比int小的。那么,我们也可以用%d来打印char。来看看,char里面所存储的数值是多少。

ascii a b c d e

  观察结果,a,b,c,d,e,居然是连续的。那我们有理由推测,字符和数值,存在某种联系。

  是的,这种猜测是正确的。字符在计算机里面就是以数值形式存储的。关键是,你把它看做是字符,还是数值。

%d %c char

  97,98,99,100,101如果你以%d打印,那么它们输出的是数值。如果你以%c打印,那么它们输出的是字符。那么,我们为什么还要char,字符类型char呢?int也可以呀。因为在早期,计算机只考虑了拉丁字符集,小写的a到z,大写的A到Z加上数字0到9,标点符号。全部加起来就127个。char的数值范围是-128到127,那么完全足够了。所以,不需要使用其它更大的类型来存储。

  那我们来看一下这0-127数值与字符的对应关系吧。这个对应关系被称之为ASCII(American Standard Code for Information Interchange),美国信息交换标准代码。

ascii
图片来自百度百科

  在表中,我们可以明确看到a对应97,b对应98,c对应99,d对应100,e对应101。和我们刚刚代码运行的结果一致。

3. 字符串

  那么字符串,自然可想而知,就是由一个个字符组成的了。为了区分,字符串由双引号包括。例如:“HelloWorld”,“a”。

  我们也来测试一下字符串的占用的空间大小。

sizeof helloworld

  HelloWorld一共10个字符,为什么sizeof测试出来的结果是11呢?

  回答这个问题之前,我们先看下面的代码。

#include <stdio.h>
int main()
{printf("%s", "HelloWorld");return 0;
}

  我们用%s来作为字符串的占位。

  我们思考一个问题,为什么%s能打印HelloWorld完就结束了呢?它是怎么知道,我们这次输送的一共10个字符呢?我们来看一下字符串的内存组成。

helloworld\n

  这下是11个了吧。没错,C语言自动帮我们添加了结束的字符’\0’。我们尝试一下,将\0添加在字符串中间。会是一个什么效果。

hello0world

  没错,%s在解析的时候发现了’\0’就认为字符串结束了,所以world就没有被打印出来了。

  那我们来看看’\0’和’\n’的数值是多少。

-0-n

  ‘\0’对应的数值是0,’\n’,对应的数值是10。在ASCII表中,位置如下。

ascii-0-n

  注意,千万不要将数值与字符搞混了。字符’0’的ascii码是48,而’\0’才是ascii的0。

\0与0的区别

  '\0’被认为是结束符,而’0’被认为是普通的字符。

  '\0’的数值为0,而’0’的数值为48。

\0与0的区别

  最后,我们知道%号和\都被用作特殊用途了。一个被用于占位符的开始,一个被用于字符转义。那如果我们确实需要打印%号和\怎么办呢?

%%\

4. getchar、putchar函数

  getchar函数用于从键盘读取一个字符。

  putchar函数用于输出一个字符。

  使用getchar的时候,输入完字符,请按回车键。

getchar_putchar

5. 中文字符串

你好

  C语言支持中文字符串,但是你会发现ASCII中没有中文。

  早期在制定标准的时候,并且考虑到非拉丁字符。目前,计算机已经在全世界范围内使用。为了兼容早期的ASCII,高于127的数值,将会被用于其他语言字符。但是,这还是不够用于所有的非英文字符的。所以,中文字符会是由多个char组成。

  在下面的例子中我们看到"你好"的空间大小为5。除去’\n’,那么就是每个中文汉字占用2个字节。

sizeof你好

在这里插入图片描述


http://chatgpt.dhexx.cn/article/MBrZaQyO.shtml

相关文章

BadeLua插件熟悉

BabeLua简介 BabeLua是一款基于VS2012/2013&#xff08;简称VS&#xff09;的免费开源的Lua集成开发环境。 具体介绍和使用方法在&#xff1a;http://www.cocoachina.com/bbs/read.php?tid205043 中有详细介绍 BabeLua简介   BabeLua是一款基于VS2012/2013&#xff08;简…

VS安装扩展BabeLua下载很慢问题

参考这位博主的方法&#xff0c;原本显示下载速度正常了&#xff0c;但是没有成功&#xff0c;没显示下载完成。 VS下载插件很慢的一种解决方法_F_Arisa的博客-CSDN博客 又参考了其他方法&#xff0c;结合起来下载成功了。 点击详细信息跳转网页&#xff0c;下载完关闭VS的情…

cocos2dx 3.16 VS+BabeLua lua环境配置与代码调试

我这里用的是cocos2dx 3.16&#xff0c;VS2015 用命令行 cocos new tank -p com.wutian.tank -l lua -d I:\WorkShop\Programs\Cocos2dx\tank 创建一个cocos2dx项目&#xff0c;中间会提示找不到某些文件&#xff0c;不用理会感觉是cocos2dx的坑 这些东西弄好之后开始为调试…

Cocos2dx 3.4 BabeLua 3.0.1.0 Windows下lua环境配置

Cocos2dx BabeLua3.0.1.0 Windows下lua环境配置 author 路人 time 2015.08.24 updateTime nonereference http://www.cocoachina.com/bbs/read.php?tid-205043-page-1.html reference http://blog.csdn.net/babestudio/article/details/27228865这篇文章用于VS 2013里cocos…

Cocos2d-lua(二)VS装入BabeLua插件

为什么装BabeLua插件&#xff0c;因为方便我们开发lua项目&#xff0c;对BabeLua插件的功能这里不介绍了&#xff08;百度一下&#xff09;&#xff0c;谁用谁知道。 一、装入插件BabeLua 1.打开VS --> 工具 --> 扩展和更新 --> 联机 --> 搜索BabeLua --> 下载…

vs2015 + BabeLua + Cocos2d-x 3.10配置

以前只用过vs2015cocos2d-x 3.9写过小游戏&#xff0c;新下载了3.10&#xff0c;想学习下Lua的使用 电脑是win10 64位&#xff0c;装的是vs2015 1. 安装cocos&#xff0c;官网下载cocos2d-x 3.10 3.10版本 Cocos2d-x与Cocos整合升级为Cocos引擎&#xff0c;下载后是exe程序&…

Visual Studio BabeLua配置

环境&#xff1a; Visual Studio 2013, Cocos 3.10, Lua5.1 window7(64) BabeLua简介&#xff1a; 基于VS免费开源的Lua集成开发插件&#xff0c;用于Lua编辑和调试相关。 其功能特性有&#xff1a; Lua语法高亮&#xff0c;语法检查 自动补全&#xff0c;一键注释 格式化代码&…

cocos2dx+vs2012+lua开发环境配置+BabeLua

cocos2dx版本&#xff1a;cocos2dx3.2 lua插件&#xff1a;babelua 1.5.3 下载地址&#xff1a;http://pan.baidu.com/s/1i3mPD8h 第一步&#xff1a;先关闭vs&#xff0c;双击下载下来的BabeLua.vsix&#xff0c;双击按照提示安装 第二步&#xff1a;用cocos2dx新建一个LUA的…

使用BabeLua在cocos2d-x中调试Lua

使用BabeLua在cocos2d-x中调试Lua BabeLua是一款基于VS2012/2013的Lua集成开发环境&#xff0c;具有Lua语法高亮&#xff0c;语法检查&#xff0c;自动补全&#xff0c;快速搜索&#xff0c;注入宿主程序内对Lua脚本进行调试&#xff0c;设置断点观察变量值&#xff0c;查看堆栈…

使用BabeLua在VS中创建Lua项目。

如果你的VS安装了BabeLua,那么就能在我写的另一篇VS2015中编译lua.iib并运行lua程序后&#xff0c;接着在工程下新建Lua项目了。取名myLuaCode。 然后右击&#xff0c;设为启动项目&#xff0c;此时应该是如图所示为空项目。 然后再右击项目&#xff0c;将我之前生成的myLu…

babelua for vs 2015

1. 安装cocos&#xff0c;官网下载cocos2d-x 3.10 3.10版本 Cocos2d-x与cocos整合升级为Cocos引擎&#xff0c;下载后是exe程序&#xff0c;双击直接安装。 我的安装目录&#xff1a;C:\Cocos\Cocos2d-x 2. 创建项目 运行cocos,,新建项目 项目名称&#xff1a;HelloWorld 项目…

Babelua 调试

最近在很多群里看到很多的朋友对于cocos2dx lua 的调试有很多的困惑&#xff0c;看着不断的找资料&#xff0c;问问题又得不到答案的你们&#xff0c;这种无力感就想到了自己&#xff0c;写这篇文章&#xff0c;对自己知识做个总结&#xff0c;希望也能帮到你们 Babelua 安装 …

使用BabeLua在Quick-cocos2d-x中编辑和调试Lua

使用BabeLua在Quick-cocos2d-x中编辑和调试Lua BabeLua是一款基于VS2012/2013的Lua集成开发环境&#xff0c;具有Lua语法高亮&#xff0c;语法检查&#xff0c;自动补全&#xff0c;快速搜索&#xff0c;注入宿主程序内对Lua脚本进行调试&#xff0c;设置断点观察变量值&#…

Lua编辑调试器 BabeLua

Lua编辑器 Lua调试器 LuaIDE LuaEdit LuaEditor BabeLua入门 BabeLua简介 BabeLua是一款基于VS2012/2013&#xff08;简称VS&#xff09;的免费开源的Lua集成开发环境&#xff0c;在Lua编辑和调试方面&#xff0c;具有如下功能和特性&#xff1a; ●Lua语法高亮 ●语法检查 ●…

BabeLua--Lua调试器

原文&#xff1a;点击打开链接 BabeLua是一款基于VS2012/2013的Lua集成开发环境&#xff0c;具有Lua语法高亮&#xff0c;语法检查&#xff0c;自动补全&#xff0c;快速搜索&#xff0c;注入宿主程序内对Lua脚本进行调试&#xff0c;设置断点观察变量值&#xff0c;查看堆栈信…

Cocos BabeLua配置

环境&#xff1a; Visual Studio 2013, Cocos 3.10, Lua5.1 window7 64位 BabeLua简介&#xff1a; 基于VS免费开源的Lua集成开发插件&#xff0c;用于Lua编辑和调试相关。 其功能特性有&#xff1a; Lua语法高亮&#xff0c;语法检查 自动补全&#xff0c;一键注释 格式化代码…

使用BabeLua在cocos2d-x中编辑和调试Lua

使用BabeLua在cocos2d-x中编辑和调试Lua BabeLua是一款基于VS2012/2013的Lua集成开发环境,具有Lua语法高亮,语法检查,自动补全,快速搜索,注入宿主程序内对Lua脚本进行调试,设置断点观察变量值,查看堆栈信息等功能。 如何安装BabeLua 请参考《系列1—BabeLua入门》 设…

quick-cocos2d-x可调试开发环境搭建(vs+babelua和vscode+luaide)

一 VSbabelua 1.下载安装quick-cocos2d-x, 推荐3.6.1 下载地址:http://cocos2d-lua.org/download/index.md 2.执行引擎根目录下的setup_win.bat设置环境变量 3.运行play3.exe 创建个项目并运行&#xff0c;此时虽然能执行但是没有生成可执行文件 4.使用VS2013打开项目目录fra…

vs2017+BabeLua+Cocos2dx3.10配置

转载自&#xff1a;vs2017BabeLuaCocos2dx3.10配置 - 简书 From: vs2015 BabeLua Cocos2d-x 3.10配置-江水静如诗 下载BabeLua插件:BabeLua For 2015 V3.2.2.0.vsix。BabeLua_免费高速下载|百度网盘-分享无限制 直接双击.vsix安装。打开VS的时候菜单栏就多了一个lua选项。…

如何用BabeLua运行Lua代码

一&#xff1a;BabeLua简单介绍 BabeLua是一款基于微软VisualStudio系列产品的免费开源的Lua集成开发环境&#xff0c;可以用来Lua语言的编译与调试。 二&#xff1a;如何用BabeLua成功运行Lua代码 1.首先你得安装好VisualStudio&#xff0c;我使用的是VS2015Windows10系统环境…