我的c++学习记录 二————基本数据类型

我的c++学习记录 二————基本数据类型

基本数据类型

编写计算机程序的目的在于高效解决现实生活中的问题,正因如此,高级语言为我们提供了许多的数据类型。C++ 的数据类型分为基本数据类型和自定义数据类型,其基本数据类型如下:

数据类型名

长度(字节)

取值范围

char

1

-128 ~ 127

bool

1

true,false

signed char

1

-128 ~ 127

unsigned char

1

0 ~ 255

short

2

-32768 ~ 32767

unsigned short

2

0 ~ 65535

int

4

-2147483648 ~ 2147483647

unsigned int

4

0 ~ 4294967295

long

4

-2147483648 ~ 2147483647

unsigned long

4

0 ~ 4294967295

float

4

3.4E-38 ~ 3.4E+38

double

8

1.7E-308 ~ 1.7E+308

long double

8

1.7E-308 ~ 1.7E+308

由上表可知,C++ 的基本数据类型一般包括:boolcharintfloat double。其中关键字 signedunsignedshortlong 被称为修饰符。特别的,当用 short long 修饰 int 时,int 可省略不写,表示短整型数据或长整型数据。

string

string C++ 标准库的一个重要部分,主要用于字符串的处理,string 类的头文件为:#include<string>。使用 string 可以对字符串的对象执行某些操作,例如拼接、查找等。

struct

struct 是由一系列相同或不同的数据类型组成的数据集合,也称结构体,是一种复合型的数据类型。

C++ 语言中 struct 的基本结构

struct struct_name

{

    memberList

}varList

其中 struct 为结构体的关键字,struct_name 为结构体的名字,memberList 为结构体成员变量及成员函数的列表,varList 为结构体声明的变量。使用 varList.元素名 可调用结构体中的元素。

例如在实验环境中新建一个名为 stru.cpp 的文件并输入:

#include <iostream>

using namespace std;

struct shiyanlou //定义 shiyanlou 结构体。

{

    int a; //定义 a 的数据类型为整型。

    int pri() {return a;}//定义 pri() 的功能为返回 a 的值。

}s1;

int main()

{

    cout<<"sbefore:"<<s1.pri()<<endl;

    s1.a = 6;

    cout<<"safter:"<<s1.pri()<<endl;

    return 0;

}

其中 sbefore 输出未初始化变量的结果,safter 输出已初始化变量的结果:

 

C++ 语言中 struct 与 C 语言中 struct 的区别

  1. 在 C++ 语言中,可直接使用结构体名来声明变量;在 C 语言中,不能直接使用结构体名来声明变量,需前缀 struct。
  2. C++ 语言的 struct 中既可以定义成员变量又可以定义成员函数;C 语言的 struct 中只能定义成员变量,不能定义成员函数。例如:

struct shiyanlou

{

    int a;

    int pri() {return a;}

}s1;

在 C++ 的编译过程中,此结构体不会出错。但若在 C 语言中,由于 int pri() {return a;} 为成员函数,会出现编译报错。

变量

变量来源于数学,是计算机语言中能储存计算结果且在程序执行过程中可以变化的量。变量需要用名字来标识且需指定相应的数据类型,变量声明的形式如下:

数据类型 变量名1,变量名2...

注意:变量的命名不是随意的,需遵守以下规则:

  1. 变量名只能包含字母(A-Z,a-z)和数字(0-9)或者下划线(_)。
  2. 变量名首位必须是字母或下划线。
  3. 不能使用 C++ 的关键字来命名变量,以免冲突。例如:struct。
  4. 变量名区分大小写。

例如声明两个 int 类型的变量:

int a_1,b

变量分为局部变量与全局变量。由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用,全局变量是可以被本程序所有对象或函数引用。

局部变量

局部变量 只作用于当前模块。例如新建一个名为 localvar.cpp 的文件并输入:

#include <iostream>

using namespace std;

int main()

{

    int a = 2; //此局部变量只作用于当前模块。

    cout<<a<<endl;

    return 0;

}

在主函数 int main() 中定义了一个局部变量 a 且赋值为 2,若在主函数中对局部变量 a 进行输出,则直接输出 2。

程序结果:

 

全局变量

当两个或两个以上模块或函数需要用到同一个变量时,可以把变量定义为 全局变量。例如新建一个名为 globalvar.cpp 的文件并输入:

#include <iostream>

using namespace std;

int global1 = 1;   //定义全局变量 global1。

void func()

{

    cout<<global1<<endl;   //输出全局变量 global1 的值。

}

int main()

{

    cout<<global1<<endl;   //输出全局变量 global1 的值。

    func();    //调用函数 func()。函数的调用会在后面的实验详细讲解,在此只做了解。

    return 0;

}

上述代码中,void func() 和 int main() 都需要使用变量 global1,即定义其为全局变量,供多个模块使用。

程序结果:

 

重名现象

当全局变量与局部变量重名的时候,起作用的是局部变量,全局变量被屏蔽掉。我们修改 globalvar.cpp 文件为以下内容:

#include <iostream>

using namespace std;

int global1 = 1;   //定义全局变量 global1。

void func()

{

    cout<<global1<<endl;   //输出全局变量 global1 的值。

}

int main()

{

    int global1 = 10;   //定义局部变量 global1 屏蔽全局变量 global1。

    cout<<global1<<endl;   //输出局部变量 global1 的值。

    func();    //调用函数 func()。函数的调用会在后面的实验详细讲解,在此只做了解。

    return 0;

}

我们在 int main() 中定义局部变量 int global1,此时出现重名现象。则 int main() 中 cout<<global1<<endl 输出的是 int main() 中局部变量 int global1 的值。

程序结果:

 

常量

常量是指具有固定值的表达式,其值在程序运行的整个过程中是不可改变的。常量一般分为整型常量、实型常量、字符常量、字符串常量和布尔常量。

整型常量

即以文字形式出现的整数,包括正整数、负整数和零。在 C++ 中支持十进制、八进制和十六进制的整数。

十进制表示的整型常量:由 - / + 若干 0 - 9 的数字组合,例如:2- 2356 等。

八进制表示的整型常量: 0 开头后跟若干个 0 - 7 数字,例如:033306 等。

十六进制表示的整型常量:以 0x 开头后跟 0 - 9 的数字及 A-F 的字母,例如:0x120x3A 等。

一般的,当十进制表示的整型常量为正整数时,可省略 +;八进制和十六进制通常表示无符号的整数,所以不必添加 - / +

实型常量

即以文字形式出现的实数,包括一般形式和指数形式。

一般形式,即正常表达的数字,例如:3.14- 6.78 等。

指数形式,通俗来说就是我们在数学中常用的 n 乘以 10 x 次方,例如:3.1E+6 表示的则是 3.1 乘以 10 6 次方,即 31000006.9E-2 表示的则是 6.9 乘以 10 - 2 次方,即 0.069

字符常量

用单引号括起来的一个字符称为字符常量。例如:'a''D' 等。

例如回车、换行、制表符等既无法显示又不能输入的特殊字符,需要利用 C++ 预定义的转义序列在程序中表示。下面是常用的预定义的转义序列表:

字符常量形式

含义

\n

换行

\r

回车

\t

水平制表符

\v

垂直制表符

\a

响铃

\f

换页

\\

字符 '\'

\"

双引号

\'

单引号

例如:input\n 则在输出字符串 'input'后执行换行操作。

字符串常量

用双引号括起来的字符序列称为字符串常量。例如:"shiyanlou""an apple" 等。

若要在字符序列中包含双引号,例如表示语句:You choose "time" or "happy",我们则需利用预定义的转义序列 \" 来表示句中的双引号。定义其字符串常量为:"You choose \"time\" or \"happy\""

布尔常量

布尔常量只有 TRUE FALSE 两种。

常量声明

常量声明一般有两种方式,一是使用 #define 预处理、二是使用 const 关键字。

  1. 使用 #define 预处理

格式:#define name value

#define PI 3.14159

#define NEWLINE '\n'

  1. 使用 const 关键字

格式:const type name = value

const double pi = 3.14;

const char tab = '\t';

运算符与表达式

表达式是运算符及其运算数的序列,它指定一项计算。一般分为算数运算符和算数表达式、逻辑运算符和逻辑表达式、关系运算符和关系表达式、条件运算符和条件表达式。

算数运算符和算数表达式

算数运算符包括基本算数运算符和自增自减运算符;算数表达式一般由算数运算符、操作数和括号组成。下面是基本的算数运算符和算数表达式:

运算符名

语法

描述

表达式

一元加

+a

正号

+a = 6

一元减

-a

负号

-a = -6

a + b

两数相加

a + b = 6

a - b

两数相减

a - b = 6

a * b

两数相乘

a * b = 8

a / b

两数相除

a / b = 8

a % b

两数整除后取余

a % b = 3

自增

a++ ++a

整数本身加一

a++ = 6 ++a = 6

自减

a-- --a

整数本身减一

a-- = 6 --a = 6

a++ ++a 的区别:++a 称为前缀形式,在表达式计算之前完成自加运算;a++ 称为后缀形式,在表达式计算之后完成自加运算。同理,--a a-- 亦如此,--a 在表达式计算之前完成自减运算;a-- 在表达式计算之后完成自减运算。例如新建 self.cpp 文档,输入:

#include <iostream>

using namespace std;

int main()

{

    int i=1;

    cout<<++i<<endl; //输出的 i 值为 2

    cout<<i++<<endl; //输出的 i 值为 2

    cout<<i<<endl;//输出的 i 值为 3

}

其中 cout<<++i<<endl; 先为 i 1 再输出 icout<<i++<<endl; 先输出当前 i 的值后再为 i 1

程序结果:

 

逻辑运算符和逻辑表达式

逻辑表达式是通过逻辑运算符将操作数或等式进行逻辑判断的语句。在下面基本的逻辑运算符和逻辑表达式中,我们假设布尔变量 a TRUEb FALSE

运算符

运算符名

描述

表达式及结果

&&

当且仅当所有操作数都为 TRUE,表达式才为 TRUE

(a && b) FALSE

||

任一操作数为 TRUE,表达式为 TRUE

(a || b) TRUE

!

取反。若操作数为 TRUE,表达式为 FALSE;若操作数为 FALSE,表达式为 TRUE

(!b) TRUE

关系运算符和关系表达式

关系表达式最终产生的是一个布尔结果,它使用关系运算符判断操作数值之间的关系。若关系正确,则结果为 TRUE,若关系错误,则结果为 FALSE。在下面基本的关系运算符和关系表达式中,我们假设 a 3b 4

运算符

运算符名

描述

表达式及结果

==

等于

判断两个操作数的值是否相等,如果相等则结果为 TRUE

(a == b) FALSE

!=

不等于

判断两个操作数的值是否相等,如果不等则结果为 TRUE

(a != b) TRUE

>

大于

判断左操作数的值是否大于右操作数的值,如果是那么结果为 TRUE

(a > b) FALSE

>=

大于等于

判断左操作数的值是否大于或等于右操作数的值,如果是那么结果为 TRUE

(a >= b) FALSE

<

小于

判断左操作数的值是否小于右操作数的值,如果是那么结果为 TRUE

(a < b) TRUE

<=

小于等于

判断左操作数的值是否小于或等于右操作数的值,如果是那么结果为 TRUE

(a <= b) TRUE

条件运算符和条件表达式

C++ 中条件运算符 ? 是三元运算符,其表达式为:

条件表达式 ? 表达式1 : 表达式2

如果条件表达式的值为 TRUE ,则返回 表达式1 的值,否则返回 表达式2 的值。

例如新建 condition.cpp 文件,输入:

#include <iostream>

using namespace std;

int main()

{

    int a = 5;

    int b = 3;

    int c;

    c=(a>b)? a : b;  //如果a大于b则返回a,否则返回b

    cout<<c;

}

c 用于接收三元运算符的返回值,又因为 a>b 的布尔值为 TRUE,所以返回 a 的值。

程序结果:

 

拓展

  1. sizeof 运算符 用于计算 对象 类型或 表达式结果 类型在内存中所占的字节数,其形式为:sizeof (对象类型名) 或 sizeof(表达式)
  2. 在 C++ 中逗号也是一个运算符,称为 逗号运算符,其形式为:表达式1,表达式2。定义了从左到右的求解顺序,例如 a = 1,a + 1 其值为 2。
  3. C++ 中最简单的赋值运算符是 '='。例如 a = (x=4) / (y=2) 表达的则是 x 赋值为 4,y 赋值为 2,a 赋值为 4 / 2,即 2。除了 =,C++ 中还有一些其他比较常用的赋值运算符:

运算符

运算符名

实例

等价于

+=

加赋值

i += 5

i = i + 5

-=

减赋值

i -= 5

i = i - 5

*=

乘赋值

i *= 5

i = i * 5

/=

除赋值

i /= 5

i = i / 5

%=

求余赋值

i %= 5

i = i % 5

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值