C++常量与变量

2021-02-04 10:07:04 浏览数 (1)

参考链接: 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

0 人点赞