参考链接: C 变量, 字面量和常量
日期:2020年3月27日 作者:Commas 注释:开始我的C 学习的奇妙之旅,愿意和我一起学习的小伙伴们可以关注我,也可以给我点赞,如若博客有哪里写的不好的地方,还望各位看官指出,非常感谢…… 更多C 内容,请看我的《C 学习的奇妙之旅》
文章目录
一、前言二、基本数据类型三、常量(一)常量的类型(1)整数常量(2)浮点常量(3)布尔常量(4)字符与字符串常量
(二)常量的定义
四、变量(一)变量的定义(二)变量的定义并且初始化
一、前言
程序中的数据包括常量与变量
常量:在程序执行期间不会改变的固定值,又称为字面量;变量:在程序执行期间可以改变的数据,本质是程序可操作的存储区的名称。
类型读写说明常量仅只读,在定义并初始化后,不可修改原值变量可读写,在程序运行中,可以修改变量值
二、基本数据类型
在C 中,数据类型决定了变量存储的大小和布局,基本数据类型可分为以下4类:
整数类型(int):基本整型;实数类型(floatdouble):浮点数类型;布尔类型(bool):存储truefalse;字符类型(char):实际上存储的是整数,可以容纳单字符的编码(ASCII码);
不知道有没有注意到,和其他高级程序语言有点不太一样,C 在基本数据类型中,是没有字符串变量的,可以采用字符串数组存储字符串的,这很C字符串风格,但是已经不鼓励使用了,不过还是要了解一下。在标准C 类库中有一个String类,这个是值得推荐的,很C 字符串风格。 另外,值得指出的是,数据的基本类型所占字节数在不同的编译环境可能会有不同,可以用sizeof(type)查看,如以下我们查看一下int类型所占字节长度:
#include <iostream>
using namespace std;
// main() 是主程序,程序开始执行的地方
int main()
{
//int类型所占字节长度
cout<<sizeof(int)<<endl;
return 0;
}
控制台输出:4
三、常量
(一)常量的类型
(1)整数常量
其实,一个整数常量的表示 = 前导 数据本身 后缀 表示;
前导决定数据的进制,如下:
十进制:无前导 数据本身八进制: 前导0 数据本身(0~7)十六进制:前导0x 数据本身(0~9及A~F)
//(1)十进制
2020
//(2)八进制
012
018 //是不合法的,八进制不可能会出现8
//(3)十六进制
0xFF
后缀决定数据类型,整数常量默认的是有符号(signed)的整数(long),可修改为:
无符号整数(unsigned):U 或 u,大小写随意;长整数(long):L 或 l,大小写随意;
2020 //整数
2020l //长整数
2020u //无符号整数
2020ul //无符号的长整数,符号顺序随意
2020lu //无符号的长整数,符号顺序随意
(2)浮点常量
其实,一个浮点常量的表示 = 整数部分 . 小数部分 后缀 指数部分 表示;
后缀决定数据类型,整数常量默认的是(double)浮点类型,可修改为:
float类型:F 或 f,大小写随意;
另外,指数部分引入E 或 e来表示,如3.14159可以表示为314159E-5L
(3)布尔常量
true:代表真,不应该将其看作为1;false:代表假,不应该将其看作为0;
(4)字符与字符串常量
类型表示存储形式示例转义字符如n,t等该字符的ASCII码n,存放的是换行符n的ASCII码字符西文单引号‘’该字符的ASCII码‘a’,存放的是a的ASCII码字符串西文双引号“”C风格的字符串:字符的ASCII码依次存放,在最后的默认用 作为结束标记“a”,存放的是a、 的ASCII码
字符串常量前面还可以加前导(前缀),可以改变类型,如下:
前导(前缀)含义类型uUnicode 16字符串char16_tUUnicode 32字符串char32_tL宽字符wchar_tu8UTF-8(仅用于字符串字面量常量)char
u"hello"
U"hello"
L"hello"
u8"hello"
(二)常量的定义
定义变量总共有两种方式:
使用#define预处理器,语法如下:
#define identifier value
//identifier:标识符
//value:常量的值
//示例:
#define LENGTH 2020;
#define NAME 'C';
使用const关键字,语法如下:
const type identifier = value;
//type:定义常量的类型
//identifier:标识符
//value:常量的值
//示例:
const int LENGTH = 2020;
const char NAME = 'C';
//以下为抛出异常的示例:
//因为char是单字节字符类型,不可以存字符串
const char NAME = "C";//invalid conversion from 'const char*' to 'char' [-fpermissive]
const char NAME = 'Commas';//character constant too long for its type
四、变量
(一)变量的定义
在使用变量前,我们要规定变量的类型,这样编译器才知道要给这些变量多少个字节的空间,我们先来看看,如何定义一个变量吧,语法如下:
type variable_list;
示例如下:
//(1)定义多个同类型的变量
int i,j,k;
//(2)定义单个变量
double d;
(二)变量的定义并且初始化
分配了这些字节空间后,变量的初始值是什么,得分以下情况讨论:
全局变量:所有函数体之外的变量,如果不给初始值,它也会自动有一个基础的初始值,比如说数值型的基础初始值为0;局部变量:在函数体内部的变量,如果不给初始值,那么值是不确定的,可能会是垃圾数据,所以定义后对变量初始化,是一个非常好的习惯。
//NO1:
type variable_name = value;
//NO2:
type variable_name(value);
//NO3:
type variable_name = {value};
//NO4:
type variable_name{0}
示例如下:
#include <iostream>
using namespace std;
// main() 是主程序,程序开始执行的地方
int main()
{
int intA = 1;
int intB(2);
int intC = {3};
int intD{4};
cout<<"intA="<<intA<<endl;
cout<<"intB="<<intB<<endl;
cout<<"intC="<<intC<<endl;
cout<<"intD="<<intD<<endl;
return 0;
}
控制台输出: intA=1 intB=2 intC=3 intD=4
另外,NO3和NO4使用了大括号,此初始化方式被称为列表初始化,该方式不允许信息的丢失,如int类型变量无法存储double类型的数据,但是NO1和NO2会将溢出信息丢失从而不会影响程序的后续运行,如下:
//(1)可以运行
int intA = 1.111;//丢失小数部分,输出值为:1
int intB(2.222);//丢失小数部分,输出值为:2
//(2)抛出异常
int intC = {3.33};//抛出异常:error: narrowing conversion of '3.3300000000000001e 0' from 'double' to 'int' inside { } [-Wnarrowing]
int intD{4.44};//抛出异常:error: narrowing conversion of '4.4400000000000004e 0' from 'double' to 'int' inside { } [-Wnarrowing]
版权声明:本文为博主原创文章,如需转载,请给出: 原文链接:https://blog.csdn.net/qq_35844043/article/details/105138910