字面值时源代码中用来描述固定值的记号,可能是整数、浮点数、字符或者字符串

2.1 整数常量

除了常见的十进制数外,还有八进制(以数字0开头)或者十六进制(0x/0X)表示法。

#include <stdio.h>

int main()
{
int x = ;
int y = 0x0A; printf("x=%d,y=%d\n",x,y);
return ;
}

输出:

x=8,y=10

常量类型可以通过后缀来区分类型

0x200 -->int
200U -->unsigned int 0L -->long
0xf0f0UL -->unsigned long 0777LL --->long long
0xFFULL --->unsigned long long

2.2 浮点常量

默认浮点常量是double,可以用F后缀表示float,用L后缀表示long double

    printf("%f\n",0.111111111F);
printf("%f\n",0.11111);
printf("%Lf\n",.9999999999L);
printf("%Lf\n",.99L);

输出:

0.111111
0.111110
1.000000
0.990000

对于long double输出必须使用%Lf的格式,否则输出结果是错误的。

2.3 字符常量

字符常量默认是int类型,除非用前置L表示wchar_t宽字符类型

#include <stdio.h>
#include <locale.h> int main()
{
int i; printf("%c,%c,%c\n",c,c2,c3); setlocale(LC_CTYPE,"en_US.UTF-8");
wchar_t wc = L'中'; char buf[] = {}; int len = wctomb(buf,wc); printf("%d\n",len); for(i = ; i<len; i++)
printf("0x%02X ",(unsigned char)buf[i]);
printf("\n"); return ;
}

输出:

0xE4 0xB8 0xAD 

使用python进行验证

>>> astr='中'
>>> astr
'\xe4\xb8\xad'

结果正确。

2.4 字符串常量

C语言中的字符串是一个以NULL(也就是\0)结尾的char数组。

空字符串在内存中占用一个字节,包含一个NULL字符。

char s[] = "Hello,World!\n";
printf("strlen=%d\n",strlen(s));
printf("sizeof=%d\n",sizeof(s)); #输出结果为: strlen=
sizeof=
------------------------------------------------------------------
char* ps = "Hello,World!\n";
printf("strlen=%d\n",strlen(ps));
printf("sizeof=%d\n",sizeof(ps)); #输出结果为:
strlen=
sizeof=8 #是指针char*代表的大小

同样可以使用L前缀声明一个宽字符串。

#include <stdio.h>
#include <locale.h> int main()
{
int i; printf("%c,%c,%c\n",c,c2,c3); setlocale(LC_CTYPE,"en_US.UTF-8");
wchar_t* ws = L"中国人"; char buf[] = {}; size_t len = wcstombs(buf,ws,); printf("%ls\n",ws);
printf("%d\n",len); for(i = ; i<len; i++)
printf("0x%02X ",(unsigned char)buf[i]);
printf("\n"); return ;
}

输出:

中国人

0xE4 0xB8 0xAD 0xE5 0x9B 0xBD 0xE4 0xBA 0xBA 

使用python进行验证:

>>> astr="中国人"
>>> astr
'\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xba'

和char字符串类似,wchar_t字符串以一个4字节的NULL结束。

#include <stdio.h>
#include <locale.h> int main()
{
int i; setlocale(LC_CTYPE,"en_US.UTF-8");
wchar_t ws[] = L"中国人"; printf("%ls\n",ws); printf("len=%d,size=%d\n",wcslen(ws),sizeof(ws)); int len = sizeof(ws);
unsigned char* b = (unsigned char*)ws; for(i = ; i<len; i++)
printf("0x%02X ",b[i]);
printf("\n"); return ;
}

输出结果为:

中国人
len=3,size=16
0x2D 0x4E 0x00 0x00 0xFD 0x56 0x00 0x00 0xBA 0x4E 0x00 0x00 0x00 0x00 0x00 0x00

编译器会自动连接相邻的字符串,便于在宏或者代码中更好地处理字符串。

对于源代码中超长的字符串,除了使用相邻字符串外,还可以用"\"在行尾换行,这个在很多语言都支持。

#include <stdio.h>
#define WORLD "world!"
int main()
{
char* s = "Hello" " "WORLD"\n"; char* s2 = "Hello"
" World!\n"; char* s3 = "Hello \
World!\n";
printf("%s",s);
printf("%s",s2);
printf("%s",s3);
return ;
}

输出结果为:

Hello world!
Hello World!
Hello World!

cgg之字面值的更多相关文章

  1. C++中的字面值指定类型

    C++中只有内置类型存在字面值,没有类(class)类型字面值.例如:0是int类型的字面值,3.14159是double类型的字面值. 字面值类型很多 整型浮点字面值 20             ...

  2. [原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. c++学习笔记——字面值常量类

    字面值常量类:数据成员都是字面值类型的聚合类是字面值常量类.如果一个类不是聚合类,但是它符合一下要求,则它也是个字面值常量类: 1.数据成员都必须是字面值类型. 2.类必须至少含有一个constexp ...

  4. Java基础-字面值

    在Java源代码中,字面值用于表示固定的值(fixed value).数值型的字面值是最常见的,字符串字面值可以算是一种,当然也可以把特殊的null当做字面值.字面值大体上可以分为整型字面值.浮点字面 ...

  5. Python文本(字面值)

    Python中的文本是一些内置类型的常量表示方法. 字符串和字节 字符串是一系列的字符序列,Python中用单引号(''),双引号(""),或者三个单引号(''' ''')三个双引 ...

  6. C语言的 (强制类型转换) 以及 '字符字面值'

    C语言的显式/隐式类型转换,都有一个中间变量的存在,原数据的类型.内容都不变. 以下代码,都用GCC编译. #include<stdio.h> int main() { char c = ...

  7. 使用#define定义字面值和伪函数

    #define是C语言提供的宏命令,其主要目的是:在编程时,为程序员提供一定方便,并能在一定程度上提高程序的执行效率.#define将一个标示符定义为一个字符串,该标示符被称为宏,被定义的字符串称为字 ...

  8. C++ 字符串字面值

    C++ 字符串字面值 C++ 基本字符串类型 C++ 字符串类型 char 和 wchar_t c11 新增了 char16_t 和 char32_t 例子: wchat_t title[] = L& ...

  9. c风格字符串,字符串字面值,c++字符串

    C风格字符串:本质上就是以空字符null为结束符的数组 可以简单的理解为:有'\0'的是c风格字符串,无'\0'的是普通字符数组 字符串字面值:是一串常量字符,字符串字面值常量用双引号括起来的零个或多 ...

随机推荐

  1. Rx 入门指引 (一)

    自学 Rx 快有一个周了, 它非常适合处理复杂的异步场景.结合自己所学,决定写系列教程. 我认为, Rx 中强大的地方在于两处 管道思想,通过管道,我们订阅了数据的来源,并在数据源更新时响应 . 强大 ...

  2. Sqlite常用sql语句

    sqlite常用sql语句 --返回UTC时间 select CURRENT_TIMESTAMP; --返回本地时间 select datetime(CURRENT_TIMESTAMP,'localt ...

  3. ASP.NET Web API 2中的错误处理

    前几天在webapi项目中遇到一个问题:Controller构造函数中抛出异常时全局过滤器捕获不到,于是网搜一把写下这篇博客作为总结. HttpResponseException 通常在WebAPI的 ...

  4. FixedUpdate真的是固定的时间间隔执行吗?聊聊游戏定时器

    0x00 前言 有时候即便是官方的文档手册也会让人产生误解,比如本文将要讨论的Unity引擎中的FixedUpdate方法. This function is called every fixed f ...

  5. vim中SnipMate 和 YouCompleteMe 插件触发键 tab 冲突

    花了好几天废了九牛二虎之力终于在win下把ycm插件装上了 然而在配置插件的时候发现snipmate插件与youcompleteme插件会发生tab键冲突 而ycm比较调,直接使snipmate插件完 ...

  6. UVa11212,Editing a Book

    正如书上所说,本题需要用IDA*算法求解 启发函数是3d+h>3maxd(d为当前操作步骤数,h为当前逆序对数,maxd为当前枚举的最大步骤数) 可见迭代递归的核心思想是枚举ans去dfs是否可 ...

  7. cocoapods导入第三方库提示RPC failed curl 18 transfer

    错误提示: error: RPC failed; curl 18 transfer closed with outstanding read data remaining fatal: The rem ...

  8. formData 无需form异步上传多个图片

    上周帮其它公司套一下一个web端微信投票系统的后台接口,遇到了一个图片以及视频上传报名的小问题,网上实现方式有很多但都不是ui上面的效果,于是自己动手改造了一个.先来看看效果图 流程很简单,就是点击每 ...

  9. 如何设置App的启动图

    如何设置App的启动图,也就是Launch Image? Step1 1.点击Image.xcassets 进入图片管理,然后右击,弹出"New Launch Image" 2.如 ...

  10. MongoDB全文检索

    1. 全文检索概念: 全文检索是对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式.  (暂时不支持中文) ...